我在使用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,我认为这会使这更容易。)
我真的很感激一点帮助,因为我真的迷失了......
答案 0 :(得分:2)
这有点像黑客,但没有理由你不能只使用concat,'n'是你所能找到的最多。
concat(fruit/@name,fruit[2]/@name,fruit[3]/@name,fruit[4]/@name,fruit[5]/@name)
如果只有4,那么最后一个将被忽略,它将使用长度为4的值。注意:你不需要第一个[1]
,它默认会默认给你。
任何其他解决方案可能会复杂得多。我可以想到使用两遍方法的一种方法,但它会使代码的可读性和可维护性降低。