检查条件 xslt [英] checking condition xslt

查看:31
本文介绍了检查条件 xslt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在上一篇文章中.

这是链接

上一个问题

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

Again Small Update in input xml the other validation are all same. Here only the chapter (element) is changing instead of chapter i will have numbers

<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>

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

In the previous question we have Chapter was the first node (chapter Bat 20) but here I have 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).

@Dimitre & @Tomalak From next time i will write fully prepared question and definitely i will post it with the solution what i have, now i am started learning little faster(XSLT) with this below output and previous output.

请在这里指导我

提前致谢卡西克

推荐答案

这种转变:

<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>

这篇关于检查条件 xslt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆