1

xpathを作成していて、ドキュメントツリーのいくつかのノードに一致するxpathを作成しました

ただし、代わりに他のすべての要素と一致させたいので、ドキュメント全体のコンテキストで選択を逆にします

したがって、次のxpathがあるとしましょう

//*[@id='menu']//*

およびドキュメント

<body>
<div>
  <h1>title</h1>
</div>
<div>
<div id="menu">
  <UL>
    <LI>home</LI>
    <LI>about</LI>
  </UL>
</div>
<div id="sidebar">
  <ul>
    <li>one</li>
    <li>two</li>
  </ul>
</div>
<div>
</body>

したがって、大文字のノードは一致しますが、私が達成したいのは、すべての小文字のノードをマークすることです。

ご協力いただきありがとうございます

4

1 に答える 1

8

元のXPath式

//*[@id='menu']//*

<div id="menu">(要素自体ではなく)の子孫であるすべての要素ノードに一致します。div「逆」の意味に応じて、次のようなものを試すことができます。

//*[not(ancestor::*[@id='menu'])]

これは、withの祖先を持たないすべての要素ノードに一致します。これには、 withid="menu"は含まれますが、その子または孫は含まれません。も除外する場合は、代わりにを使用してくださいdivid="menu"divancestor-or-self::ancestor::


XPath 2.0を使用している場合、元の質問に対するより一般的な答えは、except演算子を調べることです。XPath2.0ではX except Y、式に一致するすべてのノードを選択するように言うことができますがXY

//* except //*[@id='menu']//*

(またはのいずれかunionと一致するノード)および(との両方)演算子もあります。XYintersectXY

于 2013-03-04T11:44:48.897 に答える