2

XML ノードの 2 つのセットがあり、同一の「電話」の子を持つ要素を見つけたいと考えています。例えば:

<set1>
  <node>
    <phone>111</phone>
    <name>John</name>
  </node>
  <node>
    <phone>444</phone>
    <name>Amy</name>
  </node>
  <node>
    <phone>777</phone>
    <name>Robin</name>
  </node>
</set1>

<set2>
  <node>
    <phone>111</phone>
    <city>Moscow</city>
  </node>
  <node>
    <phone>444</phone>
    <city>Prag</city>
  </node>
  <node>
    <phone>999</phone>
    <city>Rome</city>
  </node>
</set2>

今、私は次のものを取得したい:

<result>
  <node>
    <phone>111</phone>
    <name>John</name>
    <city>Moscow</city>
  </node>
  <node>
    <phone>444</phone>
    <name>Amy</name>
    <city>Prag</city>
  </node>
  <node>
    <phone>777</phone>
    <name>Robin</name>
  </node>
  <node>
    <phone>999</phone>
    <city>Rome</city>
  </node>
</result>

私は xslt の初心者で、2 つの xml をマージして html テーブルに入れることができました。しかし、このペアリングは私よりも 1 つのレベルです。

4

1 に答える 1

2

キーを使用する

<xsl:key name="phone" match="node" use="phone"/>

次に、次のようにMuenchianグループ化でグループ化します。

<xsl:template match="/">
  <result>
    <xsl:apply-templates select="//node[generate-id() = generate-id(key('phone', phone)[1])]"/>
  </result>
</xsl:template>

<xsl:template match="node">
  <xsl:copy>
    <xsl:copy-of select="phone"/>
    <xsl:copy-of select="key('phone', phone)/*[not(self::phone)]"/>
  </xsl:copy>
</xsl:template>

読みやすくするために追加

<xsl:output indent="yes"/>
于 2012-12-08T16:43:03.383 に答える