1

別のノードに存在しないすべての要素を選択したい。

<root>
  <users>
    <array>
      <name>John</name>
      <age>30</age>
    </array>
    <array>
      <name>Joe</name>
      <age>30</age>
    </array>
    <array>
      <name>Lou</name>
      <age>30</age>
    </array>
  </users>
  <selected_users>
    <name>Joe</name>
    <age>30</age>
  </selected_users>
</root>

したがって、このリストから必要なのは、選択したユーザーノードの下にリストされていないJohnとLouです。

4

2 に答える 2

4

これを行うための短くて簡単な方法は次のとおりです。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="text"/>

    <xsl:template match="users/array/name[not(.=/*/selected_users/name)]">
        <xsl:value-of select="concat(., ' ')"/>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合:

<root>
    <users>
        <array>
            <name>John</name>
            <age>30</age>
        </array>
        <array>
            <name>Joe</name>
            <age>30</age>
        </array>
        <array>
            <name>Lou</name>
            <age>30</age>
        </array>
    </users>
    <selected_users>
        <name>Joe</name>
        <age>30</age>
    </selected_users>
</root>

必要な正しい結果が生成されます。

John Lou 

name必要な要素を変数で取得する場合は、次を使用します。

    <xsl:variable name="vSomeName" select=
"/*/users/array/name[not(.=/*/selected_users/name)]"/>
于 2012-04-27T01:34:48.550 に答える
2

このxpathを使用できます:

/*/users/array/name[not(.=/*/selected_users/name)]

「ジョン」と「ルー」を取得します。取得しようとしている出力の種類を指定すると、XSLTの例を追加できます。

于 2012-04-26T19:36:59.200 に答える