XSLT 1.0:从子节点连接属性

时间:2011-05-31 08:54:16

标签: xslt xpath

我在使用xslt时遇到了一些麻烦,希望也许有人可以帮助我:

我的xml文件如下所示:

<garden>
  <appletree>
    <fruit name="a" />
    <fruit name="b"/>
    <fruit name="c"/>
    <fruit name="d"/>
  </appletree>

  <appletree>
    <fruit name="e" />
    <fruit name="f"/>
    <fruit name="p"/>
    <fruit name="h"/>
  </appletree>

 <appletree>
    <fruit name="e" />
    <fruit name="f"/>
    <fruit name="q"/>
    <fruit name="r"/>
  </appletree>
</garden>

现在我想为appletree节点分配密钥,其中包含其子项的连接名称属性。所以第一棵树的关键是'abcd',第二棵树'efph'和第三棵树'efqr'。

我尝试了以下内容:

<xsl:key name="key" match="appletree" use="fruit/@name" />

'fruit / @ name'返回一组所有名称属性,但只有第一个用作键。其他人被忽略了。基本上我需要的是一个函数,它可以做类似的事:concat(fruit [1] / @ name,...,fruit [n] / @ name)。

XSLT 1.0中是否有这样的功能? (我不能使用XSLT 2.0,我认为这会使这更容易。)

我真的很感激一点帮助,因为我真的迷失了......

1 个答案:

答案 0 :(得分:2)

这有点像黑客,但没有理由你不能只使用concat,'n'是你所能找到的最多。

concat(fruit/@name,fruit[2]/@name,fruit[3]/@name,fruit[4]/@name,fruit[5]/@name)

如果只有4,那么最后一个将被忽略,它将使用长度为4的值。注意:你不需要第一个[1],它默认会默认给你。

任何其他解决方案可能会复杂得多。我可以想到使用两遍方法的一种方法,但它会使代码的可读性和可维护性降低。