如何创建编号列表xsl

时间:2014-03-03 20:23:04

标签: xml xslt

我的xml

  <section>
  <orderedlist>
      <listitem>
        <para>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna
        aliqua.</para>
      </listitem>

      <listitem>
        <para>Ut enim ad minim veniam, quis nostrud exercitation ullamco
        laboris nisi ut aliquip ex ea commodo consequat.</para>
      </listitem>

      <listitem>
        <para>Duis aute irure dolor in reprehenderit in voluptate velit
        esse cillum dolore eu fugiat nulla pariatur.</para>
      </listitem>

      <listitem>
        <para>Excepteur sint occaecat cupidatat non proident, sunt in
        culpa qui officia deserunt mollit anim id est laborum.</para>
      </listitem>
 </orderedlist>
 </section>

我的xls

<xsl:stylesheet version = '1.0' 
 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="listitem/para">
 <ol>
  <xsl:for-each select="//para">
   <li>
    <xsl:value-of select="."/>
   </li>
 </ol> 
</xsl:template>
</xsl:stylesheet>

在输出中我得到4份,但我只想要一份。有什么问题?

  1. Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。
  2. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。
  3. Duis aute irure dolor in repreptderit in velptate velit esse cillum dolore eu fugiat nulla pariatur。
  4. Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。

2 个答案:

答案 0 :(得分:1)

您的模板的模板标记将匹配4次,因为您有4个标记,之后//para将返回4个标记,因为它在整个文档中查找。我相信你想要这个:

<xsl:template match="listitem">
 <ol>
  <xsl:for-each select="para">
    <li>
   <xsl:value-of select="."/>
   </li>
  </ol> 
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

您要为文档中的每个ol创建单独的listitem/para。在ol级别创建orderedlist,然后在每个li创建para

示例:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="orderedlist">
        <ol>
            <xsl:apply-templates/>
        </ol>
    </xsl:template>

    <xsl:template match="listitem/para">
        <li><xsl:apply-templates/></li>
    </xsl:template>

</xsl:stylesheet>