Xslt XPath反向选择
我正在编写一个xpath,并编写了与文档树中的一些节点匹配的xpath 但是我想匹配所有其他元素,所以我想在整个文档的上下文中反转选择 假设我们有以下xpathXslt XPath反向选择,xslt,xpath,Xslt,Xpath,我正在编写一个xpath,并编写了与文档树中的一些节点匹配的xpath 但是我想匹配所有其他元素,所以我想在整个文档的上下文中反转选择 假设我们有以下xpath //*[@id='menu']//* 及文件 <body> <div> <h1>title</h1> </div> <div> <div id="menu"> <UL> <LI>home</LI>
//*[@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>
标题
- 主页
- 关于
- 一个
- 两个
所以大写的节点是匹配的,但是我想要实现的是标记所有小写的节点
感谢您的帮助您的原始XPath表达式
//*[@id='menu']//*
匹配作为
元素的后代的所有元素节点(但不匹配div
元素本身)。根据“逆”的确切含义,您可以尝试以下操作
//*[not(ancestor::*[@id='menu'])]
它将所有没有祖先的元素节点与id=“menu”
匹配,其中将包括div
与id=“menu”
,但不包括其子节点或子节点。如果还想排除div
,请使用祖先或self:
而不是祖先:
如果您有XPath 2.0,那么对原始问题的一个更一般的答案是查看
except
操作符-在XPath 2.0中,您可以说X except Y
来选择所有通过表达式X
匹配的节点,但也不能通过Y
//* except //*[@id='menu']//*
还有
union
(节点匹配的节点有X
或Y
)和intersect
(两者都X
和Y
)运算符。原始XPath表达式
//*[@id='menu']//*
匹配作为
元素的后代的所有元素节点(但不匹配div
元素本身)。根据“逆”的确切含义,您可以尝试以下操作
//*[not(ancestor::*[@id='menu'])]
它将所有没有祖先的元素节点与id=“menu”
匹配,其中将包括div
与id=“menu”
,但不包括其子节点或子节点。如果还想排除div
,请使用祖先或self:
而不是祖先:
如果您有XPath 2.0,那么对原始问题的一个更一般的答案是查看
except
操作符-在XPath 2.0中,您可以说X except Y
来选择所有通过表达式X
匹配的节点,但也不能通过Y
//* except //*[@id='menu']//*
还有
union
(由X
或Y
匹配的节点)和intersect
(都是X
和Y
)操作符。DIV不匹配,顺便说一句。DIV不匹配,顺便说一句,如果你想排除DIV,也可以改为祖先或self
。@choroba我们在同一时间有相同的想法:-)我们做了。我正要发布与您相同的解决方案:)或者更改为祖先或自我
,如果您想排除DIV.@choroba我们在同一时间有相同的想法:-)我们做了。我正要发布与您相同的解决方案:)