【问题标题】:checking condition xslt检查条件 xslt
【发布时间】:2012-07-18 11:36:30
【问题描述】:

同上一篇。

这是链接

Previous Question

再次在输入 xml 中进行小更新,其他验证都相同。这里只有章节(元素)在变化,而不是章节我会有数字

<tutorial>
<lessons>
    <lesson>
     12000 Bat 20 
    </lesson>
    <lesson>
        15000 Pen Ball 10~ 
    </lesson>
    <lesson>
        14000 Book 
    </lesson>
    <lesson>
        note lesson
    </lesson>
</lessons>
<lessons1>
    <lesson>
        24000 Pencil 10
    </lesson>
    <lesson>
        description page
    </lesson>
    <lesson>
        8000 Car Tank 25
    </lesson>
</lessons1>

在上一个问题中,我们有 Chapter 是第一个节点(第 20 章),但这里我有 12000 bat 20

上述输入的期望输出是

<Geography>
<historical>
  <social>
     <toc1>
        <toc>
           <chapter>12000</chapter>
           <unit>Bat</unit>
           <pages>20</pages>
        </toc>
        <toc>
           <chapter>15000</chapter>
           <unit>Pen Ball</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <chapter>14000</chapter>
           <unit>Book</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <sample>
              <original>note lesson</original>
           </sample>
        </toc>
     </toc1>
     <toc2>
        <toc>
           <chapter>24000</chapter>
           <unit>Pencil</unit>
           <pages>10</pages>
        </toc>
        <toc>
           <sample>
              <original>description page</original>
           </sample>
        </toc>
        <toc>
           <chapter>8000</chapter>
           <unit>Car Tank</unit>
           <pages>25</pages>
        </toc>
     </toc2>
  </social>

@Dimitre & @Tomalak 从下一次开始,我会写出准备充分的问题,我肯定会用我所拥有的解决方案发布它,现在我开始学习速度更快(XSLT),下面的输出和以前的输出。

请在这里指导我

提前致谢 卡西克

【问题讨论】:

  • @Tomalak 我真的很抱歉不是这样的't no how to write with the previous question
  • 好的@Tomalak,下次我写问题时我会这样做(实际上我是xslt的新手,我开始阅读XSLT)
  • @Tomalak:我建议 karthic 提出单独的问题,因为如您所知,当同一个问题第 N 次更新时,人们会感到疲倦。
  • @karthic:这与上一个问题几乎是一个不同的问题。但是,您不应该“走捷径”并参考之前的问题。虽然我解决了你之前的问题,但我对这个问题没有提供所需的输出感到困惑。请编辑问题并提供缺失的信息。让它自我维持,不要依赖人们愿意花时间阅读两个问题并通过猜测将它们合并。
  • @Tomalak:是的,我在一分钟前写了另一条评论,和karthic差不多。

标签: xml xslt xslt-1.0 xslt-2.0


【解决方案1】:

这种转变

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
                <xsl:output omit-xml-declaration="yes" indent="yes"/>
                <xsl:strip-space elements="*"/>

             <xsl:template match="tutorial">
                <Geography>
                  <historical>
                    <social>
                         <xsl:apply-templates select=
                         "*[starts-with(name(),'lessons')]"/>
                    </social>
                  </historical>
                </Geography>
             </xsl:template>

             <xsl:template match="*[starts-with(name(), 'lessons')]">
              <xsl:variable name="vPos" select="position()"/>

              <xsl:element name="toc{$vPos}">
               <xsl:apply-templates/>
              </xsl:element>

             </xsl:template>

             <xsl:template match=
             "lesson[substring-before(normalize-space(), ' ')
                    castable as xs:integer
                    ]">
              <xsl:variable name="vNorm" select=
                             "translate(normalize-space(), '~', '')"/>
              <xsl:variable name="vAtUnit" select=
                             "substring-after($vNorm, ' ')"/>

              <xsl:variable name="vUnit" select=
              "replace($vAtUnit, '([^0123456789]+)(\d*)', '$1')"/>

              <xsl:variable name="vLastPart" as="xs:string" select=
               "substring-after($vAtUnit, $vUnit)"/>

              <xsl:variable name="vNum"
                select="concat($vLastPart, '10'[not($vLastPart)])"/>

              <toc>
                <chapter>
                 <xsl:value-of select="substring-before($vNorm, ' ')"/>
                </chapter>
                <unit><xsl:value-of select="normalize-space($vUnit)"/></unit>
                <pages><xsl:value-of select="$vNum"/></pages>
              </toc>
             </xsl:template>

             <xsl:template match="lesson">
               <toc>
                   <sample>
                     <original><xsl:value-of select="normalize-space()"/></original>
                   </sample>
               </toc>
             </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时

    <tutorial>
    <lessons>
        <lesson>
         12000 Bat 20
        </lesson>
        <lesson>
            15000 Pen Ball 10~
        </lesson>
        <lesson>
            14000 Book
        </lesson>
        <lesson>
            note lesson
        </lesson>
    </lessons>
    <lessons1>
        <lesson>
            24000 Pencil 10
        </lesson>
        <lesson>
            description page
        </lesson>
        <lesson>
            8000 Car Tank 25
        </lesson>
    </lessons1>
</tutorial>

产生想要的正确结果

<Geography>
   <historical>
      <social>
         <toc1>
            <toc>
               <chapter>12000</chapter>
               <unit>Bat</unit>
               <pages>20</pages>
            </toc>
            <toc>
               <chapter>15000</chapter>
               <unit>Pen Ball</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <chapter>14000</chapter>
               <unit>Book</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <sample>
                  <original>note lesson</original>
               </sample>
            </toc>
         </toc1>
         <toc2>
            <toc>
               <chapter>24000</chapter>
               <unit>Pencil</unit>
               <pages>10</pages>
            </toc>
            <toc>
               <sample>
                  <original>description page</original>
               </sample>
            </toc>
            <toc>
               <chapter>8000</chapter>
               <unit>Car Tank</unit>
               <pages>25</pages>
            </toc>
         </toc2>
      </social>
   </historical>
</Geography>

【讨论】:

  • 非常感谢您,实际上我正在以不同的方式获得输出真的非常感谢您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多