gpt4 book ai didi

xml - 用于选择具有公共(public)属性的所有节点的 XPath 表达式

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:22 26 4
gpt4 key购买 nike

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

//*/@_attribute_

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

谢谢

最佳答案

Hi, a book I'm reading on XML says that to select all nodes in an XML file that have a specific attribute, use the syntax:

//*/@attribute

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

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

含义:节点的任何子元素的所有 attribute 属性是根文档本身或其后代之一

你需要:

/descendant::*[attribute::attribute]

或者缩写形式

//*[@attribute]

关于 *:形式上是名称测试,而不是节点类型测试。在 XPath 1.0 中没有元素类型测试。在 XPath 2.0 中,您有 element()。那么,为什么只选择元素呢?好吧,事实并非如此。轴有一个主节点类型,来自 http://www.w3.org/TR/xpath/#node-tests :

Every axis has a principal node type. If an axis can contain elements, then the principal node type is element; otherwise, it is the type of the nodes that the axis can contain. Thus,

  • For the attribute axis, the principal node type is attribute.
  • For the namespace axis, the principal node type is namespace.
  • For other axes, the principal node type is element.

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

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

关于xml - 用于选择具有公共(public)属性的所有节点的 XPath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com