XSLT1.0:从子节点连接属性
我在xslt方面遇到了一些问题,希望这里的人能帮助我: 我的xml文件如下所示:XSLT1.0:从子节点连接属性,xslt,xpath,Xslt,Xpath,我在xslt方面遇到了一些问题,希望这里的人能帮助我: 我的xml文件如下所示: <garden> <appletree> <fruit name="a" /> <fruit name="b"/> <fruit name="c"/> <fruit name="d"/> </appletree> <appletree> <fruit name=
<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(水果[1]/@name,…,水果[n]/@name)
XSLT1.0中有这样的函数吗?(我不能使用XSLT2.0,我认为这会使这更容易。)
我真的很感谢你的帮助,因为我在这里真的迷路了…这有点像黑客,但没有理由你不能只用concat,因为“n”是你能找到的最多的
concat(水果/@name,水果[2]/@name,水果[3]/@name,水果[4]/@name,水果[5]/@name)
如果只有4,最后一个将被忽略,它将使用长度4值。注意:第一个不需要[1]
,默认情况下它会给你这个
任何其他解决方案都可能要复杂得多。我可以想出一种使用两次通过的方法,但这会使代码的可读性和可维护性大大降低。除了您建议的解决方案之外,我几乎尝试了所有方法。。。这对我来说非常有效,尤其是因为我或多或少提前知道我要处理多少“水果”。谢谢!