给出以下XML
<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?>
<root>
<hi>
<hello-world><greeter> a </greeter><greeter> b </greeter></hello-world>
<hello-world><greeter> c </greeter><greeter> d </greeter></hello-world>
</hi>
<hi>
<hello-world><greeter> e </greeter><greeter> f </greeter></hello-world>
<hello-world><greeter> g </greeter><greeter> h </greeter></hello-world>
</hi>
</root>
我循环遍历 hi 子树中的每个 greeter 元素,我需要输出包含 hi 的元素的位置节点
到目前为止,我有这个XSL:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="hi">
<xsl:for-each select="hello-world" >
<xsl:for-each select="greeter" >
<xsl:value-of select="concat('+',count(ancestor::hi//greeter))" />
</xsl:for-each >
</xsl:for-each >
</xsl:template>
</xsl:stylesheet>
但是这会输出:
+4+4+4+4
+4+4+4+4
我需要:
+1+2+3+4
+1+2+3+4
我尝试了祖先:: hi // greeter ,祖先:: hi // preceding :: greeter ,祖先:: hi //前 - sibling :: greeter 等无济于事。
我怎样才能做到这一点?
感谢您的帮助
答案 0 :(得分:0)
你犯的错误是你上升到祖父母的水平,并从那里算孙子。无论哪个孙子问,这个数字总是一样的。
尝试改为:
<xsl:template match="/">
<xsl:for-each select="root/hi/hello-world/greeter" >
<xsl:text>+</xsl:text>
<xsl:number from="hi" level="any"/>
</xsl:for-each >
</xsl:template>
根据您想要的输出类型,您需要添加包装元素或分隔符。