XPath to get all child elements except one with specific name?

我是研究僧i 提交于 2019-12-03 07:28:20

问题


How do I target all elements in a document except a particular element name?

For example I want to exclude the terminate elements. They can occur throughout the document.

 <root>
     <terminate attr="1" />
     <other>
         The brown fox jumps over the fence. 
         <terminate>
            <b>stuff</b>
         </terminate>
     </other>
 </root>

I've tried using the not(..) operator without success likely because I'm using it wrong.

And frankly trying to Google 'not' is tough!


回答1:


The following xpath should work

/root/*[not(self::terminate)] 

Also, i think you can do it with this as well

/root/*[not(name()='terminate')]



回答2:


If you are using XPath 2.0 you can use

/root/* except /root/terminate

Which does what you would expect. It matches for nodes that exist in the first sequence but not the second.

XPath 2.0 Specification - except operator



来源:https://stackoverflow.com/questions/4121539/xpath-to-get-all-child-elements-except-one-with-specific-name

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!