如何使用基于位置的键在xml转换中执行查找?

时间:2015-02-17 15:16:13

标签: xml xslt

鉴于此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

1 个答案:

答案 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以区分元素和对象中的元素,我假设要与键匹配的元素是根的孙子,您的样本没有准确显示,所以你可能需要调整匹配模式。