このような構造のXMLがいくつかあります。
<whatson>
<productions>
<production>
<category>Film</category>
</production>
<production>
<category>Business</category>
</production>
<production>
<category>Business training</category>
</production>
</productions>
</whatson>
そして、「Business」を含まないカテゴリーを持つすべてのプロダクションを選択する必要があります(この例では最初のプロダクションのみです)。
これはxpathで可能ですか?私はこれらの線に沿って作業しようとしましたが、どこにも行きませんでした:
//production[not(contains(category,'business'))]
XPathクエリでは大文字と小文字が区別されます。あなたの例を見てみましょう(ちなみに、これはすごいです、もう誰も例を提供してくれないようです!)
//production[not(contains(category,'Business'))]
これをテストするために、ChromeでXMLファイルを開き、開発者ツールを使用してそのXPathクエリを実行すると、映画カテゴリのみが返されました。
「ビジネス」を含まないカテゴリのすべての制作を選択する必要があります
私は@Arranの答えを正しいと主張しましたが、これも追加します...厳密に解釈すると、OPの仕様は次のように実装されます
//production[category[not(contains(., 'Business'))]]
のではなく
//production[not(contains(category, 'Business'))]
後者は、firstcategory
子に「Business」が含まれていないすべてのプロダクションを選択します。 production
にcategory
子がない場合、または複数の場合、2つのXPath式の動作は異なります。
短いサンプルXMLのように、すべての<production>
に<category>
子が1つだけあれば、実際には違いはありません。常にそれが当てはまるかどうかは、その制約を実施するスキーマがあるかどうかなど、さまざまな要因によって決まります。個人的には、「コスト」があまりかからないため、より堅牢なオプションを選択します...質問に記載されている要件が本当に正しいと仮定すると(たとえば、「カテゴリのないすべての制作を選択する」 「ビジネス」を含む ')。
not(expression)
関数を使用できます
not()
は(演算子ではなく)xpathの関数です
例:
//a[not(contains(@id, 'xx'))]
OR
expression != true()
// production [not(contains(category、 'business'))]でなければなりません