我有以下xml:
<Books>
<Book author="John" country="Norway"/>
<Book author="Paul" />
<Book author="Steve" country="England"/>
</Books>
<Books>
<Book author="George" />
<Book author="Thomas" country="Germany"/>
</Books>
我想在每个“Books”元素中找到属性“country”的位置。
<Books>
<Book author="John" country="Norway"/> --1
<Book author="Paul" />
<Book author="Steve" country="England"/> --2
<Book author="Bob" country="Denmark"/> --3
</Books>
<Books>
<Book author="George" />
<Book author="Thomas" country="Germany"/> --1
</Books>
我们可以使用哪种XPath函数?
答案 0 :(得分:3)
您可以使用该属性计算前一个兄弟姐妹的数量,这是一个显示:
的模板<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Books/Book[@country]">
<xsl:value-of select="count(preceding-sibling::Book[@country]) + 1"/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Books">
<xsl:apply-templates select=".//@country"/>
</xsl:template>
<xsl:template match="@country">
<xsl:value-of select="position()"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档(格式良好)时:
<t>
<Books>
<Book author="John" country="Norway"/> --1
<Book author="Paul" />
<Book author="Steve" country="England"/> --2
<Book author="Bob" country="Denmark"/> --3
</Books>
<Books>
<Book author="George" />
<Book author="Thomas" country="Germany"/> --1
</Books>
</t>
产生了想要的正确结果:
1
2
3
1
答案 2 :(得分:0)
您可以使用XPath计数功能:
count(/Books/Book/@country)