用于选择具有公共属性的所有节点的 XPath 表达式

2024-06-24

我正在读的一本关于 XML 的书说,要选择 XML 文件中具有特定属性的所有节点,请使用以下语法:

//*/@_attribute_

我不明白的是为什么需要星号。据我了解,表达式 // 选择根节点的所有后代。那么,例如 //@lang 不会选择具有名为“lang”属性的根节点的所有后代吗?我什至无法解释上面表达式中星号的含义(我知道星号通常意味着“全部”)。如果有人能为我分解它,我将非常感激。

Thanks


你好,我正在读的一本关于 XML 的书说 选择 XML 中的所有节点 具有特定属性的文件, 使用语法:

//*/@attribute

那是错误的。它将扩展为:

/descendant-or-self::node()/child::*/attribute::attribute

意义:All attribute作为根文档本身或其后代之一的节点的任何子元素的属性

你需要:

/descendant::*[attribute::attribute]

或者缩写形式

//*[@attribute]

有关*: 正式来说是姓名测试 not a 节点类型测试。在 XPath 1.0 中没有元素类型测试。在 XPath 2.0 中你有element()。那么,为什么只选择元素呢?嗯,事实并非如此。该轴有一个主要节点类型,从http://www.w3.org/TR/xpath/#node-tests http://www.w3.org/TR/xpath/#node-tests :

每个轴都有一个主要节点类型。 如果轴可以包含元素,那么 主要节点类型是element; 否则,它是节点的类型 轴可以包含的内容。因此,

  • 对于属性轴,主要节点类型是属性。
  • 对于命名空间轴,主要节点类型是命名空间。
  • 对于其他轴,主要节点类型是元素。

这就是为什么*,child::*,self::*,descendant::*等选择元素,但是@* or attribute::* or namespace::*选择属性或范围命名空间。

关于谓词([@attribute]部分):此表达式使用上一步选择的每个节点进行计算。它需要一个布尔值来进行过滤。节点集的布尔值(这是以下结果attribute::attribute) 对于空节点集为 false,否则为 true。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于选择具有公共属性的所有节点的 XPath 表达式 的相关文章

随机推荐

  • 如何访问地图内正确的“this”:ReactJS [重复]

    这个问题在这里已经有答案了 例如 我有一个具有两种绑定方法的反应组件 import React from react class Comments extends React Component constructor props supe
  • Visual Studio 代码:无法找到 phpcs

    我在 Visual Studio Code 中遇到这个问题 我已经尝试重新安装 phpcs 扩展 但仍然面临这个问题 无法找到 phpcs 请加phpcs到您的全局路径或使用 Composer 依赖管理器将其安装到 Visual Studi
  • 从 Html 样式的 TextView 获取文本[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I have a TextView which contains text with Html attributes like subsc
  • 如何将完整图像完美地放入滑块中?

    我是这个 CSS 的新手 我的第一个滑块中有 2 个图像 实际目标是考虑将其完整图像显示到该滑块中 但不幸的是 我无法使图像完美地适合滑块 因为图像宽度比滑块宽度更大 这是该滑块的 CSS 代码 ei slider position rel
  • MarkLogic 数据中心框架快速入门中心 - 连接到远程实例时出现错误“不支持的身份验证方案:[Basic Realm=public]”

    我正在从我的工作站测试 ML DHF Quickstart Hub 并且可以很好地连接到 MarkLogic 的本地实例 但是当我创建一个新环境时gradle DEV properties文件并尝试连接到远程 MarkLogic 集群时出现
  • 运行时错误:分配给 nil 映射中的条目

    我正在尝试生成一个地图 然后将其转换为 yaml 文件 如下所示 uid kasi cn Chaithra street fkmp nandan cn Chaithra street fkmp remya cn Chaithra stree
  • 处理 1.15 亿个细胞的最快方法是什么?

    我收到了一项工作任务 其中我要查找 8 位数字并将其替换为来自 2 列表的相应新值 基本上是一个 vlookup 然后用新值替换旧值 我面临的挑战是 2 列表有 882k 行 我尝试替换的单元格约为 1 2 亿 41 000 行 x 300
  • 如何在 JavaScript 中检查字符串是否包含子字符串数组中的文本?

    非常简单 在 javascript 中 我需要检查字符串是否包含数组中保存的任何子字符串 没有任何内置功能可以为您执行此操作 您必须为其编写一个函数 尽管它可能只是对some数组方法 两种方法适合您 Array some method 正则
  • 如何提高图像质量? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一个读取身份证的 OCR 使用 YOLO 获取感兴趣的区域后 我将裁剪后的区域交给 Tesseract 来读取它 由于这些裁
  • 单步执行会产生与运行不同的结果

    我有一段代码用于拆分单元格中的文本 数据是由不使用任何有用的分隔符的调查程序输出的 因此不幸的是 将文本转换为列对我没有任何帮助 我写了这段代码 但事实证明 两种情况下结果是不同的 我一步步运行代码 直到添加第一列 然后让它完成 我从执行宏
  • 在Android中的对话框中加载webview时获取void android.webkit.WebView.loadUrl?

    我收到此错误原因是 java lang NullPointerException 当我尝试在 android 中的对话框内加载 webview 时尝试调用虚拟方法 void android webkit WebView loadUrl 我已
  • 流状态计算:累积和

    假设我有一个Java IntStream 是否可以将其转换为具有累积和的IntStream 例如 以 4 2 6 开头的流应转换为 4 6 12 更一般地说 应该如何实施有状态流操作 感觉这应该是可能的 myIntStream map ne
  • 应用程序最右侧的顶部菜单

    默认情况下 Codename One顶部菜单位于标题区域的左侧 是否可以将其改为右侧 Command services new Command Services servicesIcon Override public void actio
  • 将同义词分析器添加到elasticsearch索引中

    我有一个现有的elasticsearch索引 我想添加一个分析器 但是当我执行这个命令时 analysis analyzer synonym tokenizer whitespace filter synonym filter synony
  • 有没有办法忽略 mypy 对单个函数的检查?

    您可以忽略 mypy 对单行的检查作为回答here https stackoverflow com questions 49220022 how can mypy ignore a single line in a source file
  • 使用 $http 拦截器取消请求?

    我想弄清楚是否可以使用 http拦截器在请求发生之前取消请求 有一个按钮可以触发请求 但如果用户双击它 我不希望相同的请求被触发两次 现在 我意识到有几种方法可以解决这个问题 并且我们已经有了一个可行的解决方案 我们将其包装起来 http在
  • Ping 到 APNS 未返回

    我正在尝试连接到 Apple 的推送通知服务器并推送一些通知 所有连接尝试都超时 尝试 ping 服务器gateway sandbox push apple com and gateway push apple com并且他们无法到达 这些
  • toastr 和 ember.js

    是弹出库toastr https github com CodeSeven toastr由于 ember 不喜欢直接 dom 操作 因此不打算与 Ember 一起使用 还有其他类似的库可以与 ember 很好地配合吗 Edit 即使通过下面
  • Rails 3 中的嵌套 has_many :through

    我知道 Rails 不支持嵌套的 has many through 关系 尽管早在 Rails 2 中就已经有关于补丁的讨论和开放票证 我确实来了跨插件 https github com ianwhite nested has many t
  • 用于选择具有公共属性的所有节点的 XPath 表达式

    我正在读的一本关于 XML 的书说 要选择 XML 文件中具有特定属性的所有节点 请使用以下语法 attribute 我不明白的是为什么需要星号 据我了解 表达式 选择根节点的所有后代 那么 例如 lang 不会选择具有名为 lang 属性