我有这个XML。
<root>
<item id="first"></item>
<item id="second"></item>
<item id="third"></item>
<ref ids="first"></ref>
<ref ids="first second"></ref>
<ref ids="third"></ref>
</root>
我想找到引用<ref>
的{{1}}元素的位置。
对于上面的XML,它应该是这样的。
<item>
我试图为此编写XSLT,但我遇到了一些问题。
1,2
2
3
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" indent="no"/>
<xsl:template match="item">
<xsl:variable name="thisId" select="@id" />
<xsl:variable name="references" select="/root/ref[contains(@ids, $thisId)]/position()" />
<xsl:value-of select="$references" separator=", " />
</xsl:template>
</xsl:stylesheet>
的真实位置。您对如何确保这一点有什么想法吗?谢谢。
答案 0 :(得分:1)
假设您使用的是 XSLT 2.0 ,请尝试:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:key name="ref" match="ref" use="tokenize(@ids, ' ')" />
<xsl:template match="item">
<xsl:value-of select="key('ref', @id)/(count(preceding-sibling::ref) + 1)" separator=", " />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>