如何在没有特定属性的所有元素上使用XPath进行过滤

lyn*_*bym 20 xml xpath

我的XPath有点生疏...假设我有这个简单的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>
Run Code Online (Sandbox Code Playgroud)

我想运行一个简单的XPath查询来解析所有的真实状态(所以不要拉入territory = true的状态).我试过\ StateProvince [@territory!='true']但是我得到了零.其他变化似乎失败了.这似乎应该很简单,但找不到我想要的东西.

任何帮助赞赏.

Dim*_*hev 32

一个选择所需元素的XPath表达式:

        /*/States/StateProvince[not(@territory='true')]

请注意,必须//尽可能避免使用缩写,因为它会导致扫描整个文档(以上下文节点为根的子树).

上述XPath表达式 通过考虑最初提供的XML文档的结构来避免使用缩写.//

只有当XML文档的结构完全未知时(并且XPath表达式旨在用于许多具有未知结构的XML文档),才应考虑使用//缩写.


Jor*_*nes 7

你非常接近:

//StateProvince[not(@territory) or @territory != 'true']
Run Code Online (Sandbox Code Playgroud)

应该得到你想要的结果.