XSLT 1.0:连接子节点的属性

问题描述

| 我在使用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-nodes分配键,这些键由其child-children的级联name属性组成。因此,第一棵树的键为\'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,我认为这会使这变得容易得多。) 我真的很感谢您的帮助,因为我真的在这里迷路了...     

解决方法

        这有点骇人听闻,但没有理由您不能只使用concat,因为“ n”是您所能找到的最多的东西。
concat(fruit/@name,fruit[2]/@name,fruit[3]/@name,fruit[4]/@name,fruit[5]/@name)
如果只有4,则最后一个将被忽略,它将使用长度4的值。注意:您不需要第一个上的
[1]
,无论如何它都会默认为您提供。 任何其他解决方案都可能非常复杂。我可以想到一种使用两遍方法的方法,但这会使代码的可读性和可维护性大大降低。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...