我需要过滤一些重复的节点(在一个键上)的操作 以下是我的数据文件。
data.xml中
<root>
<node name="item1" />
<node name="item2" />
<node name="item3" />
<node name="item4" />
</root>
在文件item1.xml
中<item>
<group>A</group>
</item>
item2.xml
<item>
<group>B</group>
</item>
item3.xml
<item>
<group>B</group>
</item>
item4.xml
<item>
<group>D</group>
</item>
XSLT文件
<xsl:for-each select="/root/node">
<xsl:variable name="itemName" select="@name"/>
<xsl:variable name="groupName" select="document($itemName)/item/group"/>
<xsl:value-of select="concat('Group ',$groupName)"/>
</xsl:for-each>
输出
A组 B组 B组 C组
期望的输出
A组 B组 C组
此处第2项和第3项根据其组属性属于同一组,因此我只需要打印其中任何一个的组名。
答案 0 :(得分:0)
<root>
<node name="item1" group="A"/>
<node name="item2" group="B"/>
</root>
如果组名本身可以某种方式作为属性放在主XML文件中,则可以按如下方式找到不同的节点
<xsl:for-each select="/root/node[not(@group = preceding-sibling::node/@group)]">
</xsl:for-each>
上面的select表达式将忽略之前遇到的任何节点(属于前面的一个节点)
PS:这不是涉及多个XML文件的问题的解决方案。该行中的任何答案都是有用的。