问题标签 [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.

0 投票
2 回答
9885 浏览

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()吗?

0 投票
2 回答
911 浏览

java - 带有名称空间的文档的 Java XPath 解析器的奇怪行为

我需要在 Java 应用程序中使用 XPath 表达式查询 XML 文档。我创建了以下类,它接受一个文件(本地硬盘驱动器上 XML 文档的位置)和一个 XPath 查询,并且应该返回对给定文档评估给定查询的结果。

现在假设我有以下 XML 文档。

评估两者/Document/FileFormat//FileFormat返回PDF(如预期的那样)。

然而,现在假设一个带有命名空间前缀的文档,如下所示。

现在/Document/FileFormat返回PDF,但//FileFormat不返回任何东西。

对于带有命名空间前缀的文档,为什么我的代码不会返回预期的输出,我该如何解决?

0 投票
3 回答
1734 浏览

python-2.7 - xpath 后代和后代或自我的工作方式完全不同

我尝试在具有指定 id 的 div 的后代中查找所有秒 td,即 22 和 222。我想到的第一个解决方案是:

但它只选择第一个表格单元格,即 22 但不是 22 和 222。然后我用 /descendant-or-self::node()/ 替换了 // 并得到了相同的结果(显然)。但是当我删除“-or-self”时,xpath 表达式开始按预期工作

这是测试HTML

我想知道为什么这两个表达式的工作方式不同,因为无论是否包含 div,所有 td 都是 div 元素的后代。