У меня есть следующий XML, из которого я хочу сопоставить звезду и планету:
<stars>
<star>sss1</star>
<star>sss2</star>
<planet>ppp1</planet>
<star>sss3</star>
<planet>ppp2</planet>
<star>sss4</star>
</stars>
Я хочу выбрать положение звездных узлов без учета узлов планеты.Например, если я использую position () на звезде, я получу следующее:
1: sss1
2: sss2
4: sss3
6: sss4
Я хочу иметь возможность выбрать положение () только звезды, поэтому я получаю:
1: sss1
2: sss2
3: sss3
4: sss4
Есть ли способ отбросить другие узлы при использовании функции position ()?
Вот код, который я использую:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="stars">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="star">
<xsl:element name="h2">
<xsl:attribute name="class">
<xsl:value-of select="position()" />
<xsl:attribute>
</xsl:element>
</xsl:template>
<xsl:template match="planet">
<!-- do something else -->
</xsl:template>
</xsl:stylesheet>
В контексте кода я должен сопоставить звезду и планету по мере их появления.Я не могу сделать, например:
<xsl:template match="/">
<xsl:apply-templates select="star"/>
<xsl:apply-templates select="planet"/>
</xsl:template>