web-dev-qa-db-ja.com

特定の属性のないすべての要素でXPathを使用してフィルタリングする方法

私のXPathは少し錆びています...この単純なXMLファイルがあるとしましょう:

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>

単純なXPathクエリを実行して、すべての真の状態を解析したいと思います(したがって、territory = trueの状態をプルしないでください)。\StateProvince [@territory!= 'true']を試しましたが、ゼロになりました。他のバリエーションは失敗しているようです。これは単純なはずですが、必要なものが見つかりません。

助けていただければ幸いです。

20
lyngbym

必要な要素を選択する1つのXPath式

/*/States/StateProvince[not(@territory='true')]

注意してくださいその人は//ドキュメント全体(コンテキストノードをルートとするサブツリー)がスキャンされるため、可能な限り省略形

上記のXPath式は//省略形最初に提供されたXMLドキュメントの構造を考慮に入れます。

XMLドキュメントの構造が完全に不明な場合(およびXPath式が構造が不明な多くのXMLドキュメントで使用されることを意図している場合)のみ//省略形が考慮されます

32

あなたはとても近いです:

//StateProvince[not(@territory) or @territory != 'true']

あなたが望む結果を得るはずです。

7
Jordan S. Jones

これは機能するはずです:

//StateProvince[not(@territory='true')]
3
pgb