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

标签 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>

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

感谢任何帮助。

最佳答案

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

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

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

上面的 XPath 表达式通过考虑结构避免了使用 // abbreviation最初提供的 XML 文档。

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

关于xml - 如何在没有特定属性的所有元素上使用 XPath 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812090/

相关文章:

r - 从维基百科的一个部分中抓取表格

android - 如何在 Android 上将一些 View 设置为 TextInputLayout

java - 对单个元素而不是整个文档进行 XML 验证

python - 创建 xpath 以便能够有条件地定位元素时遇到问题

xml - 缺少节点的 xpath

c# - 使用 XPath 和 C# 移动多个 iFrame

C++ MSXML2 - 从 XML 中删除 namespace

xml - 在 Golang 中解码 XML 数组 : Only Getting The First Element

php - XML 解析子问题

xpath - 在 WSO2 Identity Server 5.0 中发布时,包含 XPath 表达式的 XACML 策略不起作用