xsl 查找与祖先节点的相对位置 [英] xsl finding relative position to ancestor node
问题描述
获取子division
相对于section
节点的位置有一些问题.这是我的 XML 文件:
<部分><部门>部门的文本</部门><部门>部门的文本</部门><部门>部门的文本</部门></节><部分><部门>部门的文本</部门><部门>部门的文本</部门><部门>部门的文本</部门></节></文档>
这是我的 XSL:
<xsl:for-each select="//section"><div class="section"><xsl:text>部分 </xsl:text><xsl:value-of select="position()"/><xsl:apply-templates/>
</xsl:for-each></xsl:模板><xsl:template match="division"><div class="division"><xsl:text>部门 </xsl:text><xsl:value-of select='count(../preceding-sibling::section)+1'/><xsl:text>.</xsl:text><xsl:value-of select="position()"/><xsl:apply-templates/>
</xsl:模板>
我想要这种位置取决于section
的输出:
第 1 节1.1 项1.2 项1.3 项第 2 节2.1 项2.2 项2.3 项
不是这个:
第 1 节1.2 项1.4 项1.6 项第 2 节2.2 项2.4 项2.6 项
它看起来像 ../section[position()]
或 ../ancestor/position()
但它是错误的...谢谢!
尝试使用 xsl:number
代替 position()
.
示例:
XML 输入
<部分><部门>部门的文本</部门><部门>部门的文本</部门><部门>部门的文本</部门></节><部分><部门>部门的文本</部门><部门>部门的文本</部门><部门>部门的文本</部门></节></文档>
XSLT 1.0
<xsl:output method="text"/><xsl:strip-space elements="*"/><xsl:template match="text()"/><xsl:template match="section|division"><xsl:value-of select="concat(name(),' ')"/><xsl:number level="multiple" count="section|division"/><xsl:text>
</xsl:text><xsl:apply-templates/></xsl:模板></xsl:stylesheet>
输出
第 1 节1.1 项1.2 项1.3 项第 2 节2.1 项2.2 项2.3 项
<小时>
这是另一个与您在 XSLT 中所做的更接近的示例.(我添加了 元素来包裹文本.
XSLT 1.0
<xsl:output indent="yes"/><xsl:strip-space elements="*"/><xsl:template match="text()"/><xsl:template match="section|division"><div class="{name()}"><p><xsl:value-of select="concat(name(),' ')"/><xsl:number level="multiple" count="section|division"/></p><xsl:apply-templates/>
</xsl:模板></xsl:stylesheet>
输出
<p>第1节</p><div class="division"><p>第1.1部分</p><div class="division"><p>第1.2部分</p>