【问题标题】:condition checking in xsltxslt 中的条件检查
【发布时间】:2012-07-17 13:37:31
【问题描述】:

我上一个问题的一点更新已经@Dimetre 回答了

Link

输入 XML

<tutorial>
<lessons>
   <lesson>
     chapter Bat 20 
</lesson>
    <lesson>
        chapter Pen Ball 10~ 
    </lesson>
    <lesson>
        chapter Book 
    </lesson>
    <lesson>
        note lesson
    </lesson>
 <lessons1>
    <lesson>
        chapter Pencil 10
    </lesson>
    <lesson>
        description page
    </lesson>
    <lesson>
        chapter Car Tank 25
    </lesson>
</lessons1>
</lessons>

输出将是

<Geography>


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

在输入 XML 中,我有示例,实际上我已经写了两节课(第 1 课,第 1 课),但实际上我有 n 节课。我想我要求更多,但我正在同时学习。

请帮助我并指导我

提前致谢

问候 卡西克

【问题讨论】:

    标签: xml 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[starts-with(normalize-space(), 'chapter')]">
              <xsl:variable name="vNorm" select=
                             "translate(normalize-space(), '~', '')"/>
              <xsl:variable name="vAtUnit" select=
                             "substring-after($vNorm, 'chapter')"/>
    
              <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>chapter</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 文档时(更正为没有将 lessons1 嵌套在 lessons 中):

    <tutorial>
        <lessons>
           <lesson>
             chapter Bat 20
           </lesson>
           <lesson>
                chapter Pen Ball 10~
           </lesson>
           <lesson>
                chapter Book
           </lesson>
           <lesson>
                note lesson
           </lesson>
        </lessons>
        <lessons1>
            <lesson>
                chapter Pencil 10
            </lesson>
            <lesson>
                description page
            </lesson>
            <lesson>
                chapter Car Tank 25
            </lesson>
        </lessons1>
    </tutorial>
    

    产生想要的正确结果

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

    【讨论】:

    • 嗨@Dimitre 很抱歉有同样问题的小更新请帮助我stackoverflow.com/questions/11540422/…>
    • @karthic:那么,更新是什么?为什么不提交一个新问题?
    • 嗨@Dimitre 我已经提出了一个新问题,这里是链接link
    【解决方案2】:

    这是您自己的 XML 格式吗?通过将课程编号放在课程元素中,您似乎在限制自己的数据(或删除结构)。如果您使用 XSL 来处理它,每次添加新课程时,您都必须更新 xsl 以应对新类型,或者制作复杂的样式表来完成它。取而代之的是,使用属性不是更好吗,所以对于您拥有的章节,而不是课程和课程1

     <lesson id='1'>
      ....
     </lesson>
     <lesson id='2'>
     ....
     </lesson>
    

    如果您有 1 节课或 50000 节课,则无需更改代码,您可以使用 dimitre 为您编写的修改版本

    【讨论】:

    • 嗨 @Woody 这不是我的 XML 格式,我正在使用这种类型的 XML。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多