2011-05-31 116 views
1

我遇到一些麻烦XSLT和希望,也许这里有人能帮助我:XSLT 1.0:从串联子节点属性

我的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" /> 

“果/ @名”返回一组全名attributs的,但只有第一个被用作关键。其他人被忽略。所以基本上我需要的就是这样一个函数:concat(fruit [1]/@ name,...,fruit [n]/@ name)。

XSLT 1.0中有这样的函数吗? (我不能使用XSLT 2.0,我认为这将使这容易得多。)

我会很感激的帮助不大,因为我真的在这里输了...

回答

2

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

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

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

任何其他解决方案可能会明显更复杂。我可以想到使用双通道方法的一种方法,但它会使代码更加可读和可维护。

+0

我尝试了几乎所有的东西,除了你建议的解决方案......这对我来说很好,尤其是因为我事先或多或少知道要处理多少'水果'。非常感谢! – 2011-05-31 20:38:14