鉴于此XML细分:
<characteristics>
<characteristic>fuzzy</characteristic>
<characteristic>moist</characteristic>
<characteristic>purple</characteristic>
<characteristic>lazy</characteristic>
</characteristics>
<objects>
<object name="Gary">
<characteristics>
<characteristic>2</characteristic>
<characteristic>3</characteristic>
</characteristics>
</object>
<object name="Oscar">
<characteristics>
<characteristic>1</characteristic>
<characteristic>3</characteristic>
<characteristic>4</characteristic>
</characteristics>
</object>
</objects>
每个对象的特征&#39;值是所需元素的位置。我将如何改造物体&#39;使用第一个块中的值的特征?我认为我需要使用密钥,但我不知道如何在定义中使用position()函数。我想要的结果看起来像这样:
Gary
characteristics:
moist
purple
Oscar
characteristics:
fuzzy
purple
lazy
答案 0 :(得分:1)
如果您想使用密钥,则可以将其定义为<xsl:key name="ck" match="/*/characteristics/characteristic" use="count(preceding-sibling::characteristic) + 1"/>
,然后引用,例如。
<xsl:template match="object/characteristics/characteristic">
<xsl:value-of select="key('ck', .)"/>
</xsl:template>
注意键的匹配模式中的/*/characteristics/characteristic
以区分元素和对象中的元素,我假设要与键匹配的元素是根的孙子,您的样本没有准确显示,所以你可能需要调整匹配模式。