我正在尝试将 XML 文档转换为一个列表,其中的值基于前面兄弟姐妹的属性。
示例 XML:
<myRoot>
<Person>Craig</Person>
<Person rank="10">Woody</Person>
<Person>Brian</Person>
<Person>Michael</Person>
<Person rank="20">Emily</Person>
<Person>Chris</Person>
</myRoot>
我想要的是:
<myNewRoot>
<Index>1: Craig</Index>
<Index>10: Woody</Index>
<Index>11: Brian</Index>
<Index>12: Michael</Index>
<Index>20: Emily</Index>
<Index>21: Chris</Index>
</myNewRoot>
我被卡住了,无法确定使用 @rank 属性的最后一个先前兄弟与当前节点之间的距离。
这是我当前的样式表
<xsl:template match="Person">
<xsl:element name="Index">
<xsl:choose>
<xsl:when test="./@rank">
<xsl:value-of select="./@rank"/>
</xsl:when>
<xsl:when test="preceding-sibling::Person[@rank]">
<xsl:value-of select="count(.|preceding-sibling::*[. > current()/preceding-sibling::Person[@rank][1]]) + preceding-sibling::Person[@rank][1]/@rank"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="position()"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>: </xsl:text>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
我只是无法让 count() 功能正常工作并继续以
<myNewRoot>
<Index>1: Craig</Index>
<Index>10: Woody</Index>
<Index>11: Brian</Index>
<Index>11: Michael</Index>
<Index>20: Emily</Index>
<Index>21: Chris</Index>
</myNewRoot>