特定の属性を持たないすべての要素で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クエリを実行して、すべてのtrue状態を解析したい(したがって、territory = trueの状態は取り込まないでください)。 \ StateProvince [@territory!= 'true']を試しましたが、ゼロになりました。他のバリエーションは失敗しているようです。これは単純なように思えますが、必要なものが見つかりません。
ご協力ありがとうございます。
解決
必要な要素を選択する1つのXPath式:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / * / States / StateProvince [not(@ territory = 'true')]
注意事項: //
の略語は、ドキュメント全体(サブツリーをコンテキストノード)スキャンする。
上記のXPath式は、次の構造を考慮して、 //
略語の使用を回避します。最初に提供されたXMLドキュメント。
XMLドキュメントの構造が完全に不明な場合(およびXPath式が不明な構造を持つ多くのXMLドキュメントで使用されることを意図している場合)のみ、 //
略語を考慮する。
他のヒント
非常に近い:
//StateProvince[not(@territory) or @territory != 'true']
必要な結果が得られるはずです。
これは動作するはずです:
//StateProvince[not(@territory='true')]
所属していません StackOverflow