我的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份,但我只想要一份。有什么问题?
答案 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>