4

私は次のようなxmlを持っています:

<movies>
    <movie name="aaa">
        ...
    </movie>
    <movie name="bbb">
        ...
    </movie>
    <movie name="ccc">
        ...
    </movie>
    <movie name="ddd">
        ...
    </movie>
    <movie name="eee">
        ...
    </movie>
</movies>

映画の名前が「aaa」、「bbb」、または「ddd」でない場合、映画の名前を取得したいと思います。したがって、出力を次のようにしたいと思います。

ccc
eee

いくつかの制限があるため、'xsl:if' を使用するのは適切ではないと思います..xslt を次のように書きました (xslt 1.0 を使用しています):

<xsl:value-of select="movies/movie/@name[not(self::aaa) and not(self::bbb) and not(self:ddd)]"/>

しかし、コンパイラは、この文に構文エラーがあると不平を言いました..そして、私はその理由を理解できません..

それで、誰でもこれで私を助けることができますか?どうもありがとう!!

4

2 に答える 2

4

次の XPath 式を試してください。

movies/movie[@name!='aaa' and @name!='bbb' and @name!='ddd']/@name

またはこれ:

movies/movie/@name[.!='aaa' and .!='bbb' and .!='ddd']

後者は短いですが、前者は簡単に拡張して、名前だけでなく要素全体を返すように拡張できます。最後<movie>に削除するだけです。/@nameまたは、2 番目にそれが必要な場合は/..、最後に追加します。

于 2013-04-08T21:51:56.193 に答える
3

比較する値が多すぎる場合は、次のような式の使用を検討してください。

/*/movie[not(contains('|aaa|bbb|ddd|', concat('|', @name, '|)))]/@name

これにより、XSLT ドキュメントの最上位の要素の子であり、(属性の) 値がパイプで区切られた文字列値のリスト内の文字列の 1 つでない任意の要素nameの任意の属性が選択されます。moviename"|aaa|bbb|ddd|"

于 2013-04-09T03:56:42.440 に答える