Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT1.0:从子节点连接属性_Xslt_Xpath - Fatal编程技术网

XSLT1.0:从子节点连接属性

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=

我在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(水果[1]/@name,…,水果[n]/@name)

XSLT1.0中有这样的函数吗?(我不能使用XSLT2.0,我认为这会使这更容易。)


我真的很感谢你的帮助,因为我在这里真的迷路了…

这有点像黑客,但没有理由你不能只用concat,因为“n”是你能找到的最多的

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

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


任何其他解决方案都可能要复杂得多。我可以想出一种使用两次通过的方法,但这会使代码的可读性和可维护性大大降低。

除了您建议的解决方案之外,我几乎尝试了所有方法。。。这对我来说非常有效,尤其是因为我或多或少提前知道我要处理多少“水果”。谢谢!