2012-09-17 59 views
0

我需要在一些重複的節點(在一個鍵上)過濾操作 以下是我的數據文件。如何保持全局列表在XSLT中唯一循環

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> 

輸出

甲組 B組 B組 C組

希望的輸出

甲組 B組 C組

這裏項2和3是相同的基團的根據它們的組屬性,所以我有僅打印的任何它們的組名。

+0

我不認爲''方法是跨文檔工作的,但也許這就是答案的一部分。 – cbeer

+0

@cbeer如果我把屬性放在單個文件中,可以做任何事情嗎?例如 SoulMan

回答

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文件的問題。該行的任何答案都是有用的。