0

我需要过滤一些重复的节点中的操作(在一个键上)以下是我的数据文件。

数据.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 项根据它们的组属性属于同一组,所以我只需要打印其中任何一个的组名。

4

1 回答 1

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>

上面的选择表达式将忽略之前遇到的任何节点(属于前面的节点之一)

PS:这不是涉及多个 XML 文件的问题的解决方案。该行中的任何答案都会很有用。

于 2012-09-21T11:15:50.053 回答