问题标签 [descendant-or-self]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - XQuery: // vs 后代或自我::node()
最近我需要在 HTML 文档的节点上评估 XQuery。基本上,我需要从 body 元素的第一个子元素中选择具有 href 属性的所有元素。我添加了一个小例子来解释:
在这种情况下,所需的提取结果显然是:
我的第一个想法是使用//body/*[1]//*[@href]
,因为:
//body
匹配 body 元素,无论它在哪里/*[1]
匹配 body 元素的第一个子元素//*[@href]
匹配当前元素的所有后代或自身
我认为这可行,但在提供的示例中,XQuery 没有给出任何结果。
但是,我阅读了一下,发现以下内容(来源:http ://www.keller.com/xslt/8/ ):
所以我将我的 XQuery 更改为//body/*[1]/descendant-or-self::node()[@href]
,这一次,结果是正确的。
我的问题://和descendant-or-self::node()有什么区别?我在这里找到的(What's the difference between //node and /descendant::node in xpath?)和这里(http://www.w3.org/TR/xpath/#axes)说:
//
是 的缩写/descendant-or-self::node()/
。例如,//para
是 的缩写/descendant-or-self::node()/child::para
。
这使我得出结论//
并且/descendant-or-self::node()
不可互换(可能是因为最后终止/
了?),但是有人可以告诉我是否有简写/descendant-or-self::node()
吗?
java - 带有名称空间的文档的 Java XPath 解析器的奇怪行为
我需要在 Java 应用程序中使用 XPath 表达式查询 XML 文档。我创建了以下类,它接受一个文件(本地硬盘驱动器上 XML 文档的位置)和一个 XPath 查询,并且应该返回对给定文档评估给定查询的结果。
现在假设我有以下 XML 文档。
评估两者/Document/FileFormat
并//FileFormat
返回PDF
(如预期的那样)。
然而,现在假设一个带有命名空间前缀的文档,如下所示。
现在/Document/FileFormat
返回PDF
,但//FileFormat
不返回任何东西。
对于带有命名空间前缀的文档,为什么我的代码不会返回预期的输出,我该如何解决?
python-2.7 - xpath 后代和后代或自我的工作方式完全不同
我尝试在具有指定 id 的 div 的后代中查找所有秒 td,即 22 和 222。我想到的第一个解决方案是:
但它只选择第一个表格单元格,即 22 但不是 22 和 222。然后我用 /descendant-or-self::node()/ 替换了 // 并得到了相同的结果(显然)。但是当我删除“-or-self”时,xpath 表达式开始按预期工作
这是测试HTML
我想知道为什么这两个表达式的工作方式不同,因为无论是否包含 div,所有 td 都是 div 元素的后代。