0

(キーで) 重複しているいくつかのノードで操作をフィルター処理する必要があります。以下は私のデータ ファイルです。

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 は、グループ属性に従って同じグループに属しているため、それらのグループ名のみを出力する必要があります。

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>

上記の選択式は、以前に検出されたノードを無視します (先行するノードの 1 つに属します)。

PS: これは、複数の XML ファイルが関係する問題の解決策ではありません。その行の答えは役に立ちます。

于 2012-09-21T11:15:50.053 に答える