我正在写一个xpath,我编写了xpath,它匹配文档树中的一些节点
但是我想要匹配所有其他元素,所以我想在整个文档的上下文中反转选择
所以我们假设我们有以下xpath
//*[@id='menu']//*
Run Code Online (Sandbox Code Playgroud)
和文件
<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>
Run Code Online (Sandbox Code Playgroud)
所以上层节点是匹配的,但我想要实现的是标记所有小写节点.
谢谢你的帮助
你的原始XPath表达式
//*[@id='menu']//*
Run Code Online (Sandbox Code Playgroud)
匹配是的后裔所有元素节点<div id="menu">(但不是该div元素本身).根据你所说的"逆"你的意思,你可以尝试类似的东西
//*[not(ancestor::*[@id='menu'])]
Run Code Online (Sandbox Code Playgroud)
它匹配所有没有祖先的元素节点,id="menu"包括divwith id="menu"但不包括其子节点或孙子节点.如果您也想要排除div,请使用ancestor-or-self::而不是ancestor::
如果您有XPath 2.0,那么对原始问题的更一般的答案就是查看except运算符 - 在XPath 2.0中,您可以说X except Y选择所有与表达式匹配的节点X但不是Y
//* except //*[@id='menu']//*
Run Code Online (Sandbox Code Playgroud)
也有union(通过匹配的节点X或Y)和intersect(均为X和Y)运算符.