xpath中的这些有什么区别?
what is the difference between these in xpath?
我是 xpath 的新手,谁能告诉我 xpath 中的 /bookstore/*
和 /bookstore
有什么区别?
假设这是示例输入
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
<bookstore>
<book>
<title lang="en">Harry Potter1</title>
<price>29.999</price>
</book>
<book>
<title lang="en">Learning XML1</title>
<price>39.955</price>
</book>
</bookstore>
这两种情况下会输出什么?
提前致谢。
表达式 /bookstore/*
将 select 个子节点,/bookstore
将 select 节点本身。
例如,/bookstore/*
将 select /bookstore
下的所有子元素 ,因此您最终可能会得到一个元素集合。请注意,如果这是一个更复杂的表达式,如 /bookstore/book/*
并且有多个 /bookstore/book
元素,则所有匹配节点的所有子节点都是 selected.
表达式 /bookstore
将 select 只有元素 /bookstore
。与上面类似,如果它沿着像 /bookstore/book
.
这样的路径,这样的 select 可能会导致元素的集合
假设以下简单输入文档:
<bookstore>
<book/>
<book/>
</bookstore>
现在,表达式
/bookstore
表示
Select an element named bookstore
, but only if it is the outermost element of the document
在格式良好的 XML1 中只能有一个最外层元素,所以上面的路径表达式只会 select 最多一个元素节点.
/bookstore/*
表示
Select an element named bookstore
, but only if it is the outermost element of the document. Then, select all its immediate child elements, regardless of their name.
1 正如 Michael Kay 指出的那样,除非您以编程方式构建 XML 树。然后,可能有多个最外层元素。
then in case of /bookstore/* out put wil not contain <bookstore>
and </bookstore>
我可以看到两种阅读此问题的方法。
为什么 <element>
和 </element>
都是?
将 <bookstore>
和 </bookstore>
视为 一个单一元素 。它们是该元素的开始和结束 tag。一旦输入文档被读入内存,它就会存储在树状结构中(例如 DOM), 没有开始和结束标签 。您评估 XPath 表达式所依据的就是这种表示。
但是,如果您输出对 XPath 表达式求值的结果,则结果树会再次序列化,并且标签会重新出现 - 这可能会造成混淆。
是否在路径 selected 中提到了所有元素?
不,在像
这样的表达式中
/bookstore/book
只有 book
个元素节点被 select 编辑。只有最右边的项目,就在最后一个 axist step 之后(例如 /
和 parent::
)被 selected.
我是 xpath 的新手,谁能告诉我 xpath 中的 /bookstore/*
和 /bookstore
有什么区别?
假设这是示例输入
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
<bookstore>
<book>
<title lang="en">Harry Potter1</title>
<price>29.999</price>
</book>
<book>
<title lang="en">Learning XML1</title>
<price>39.955</price>
</book>
</bookstore>
这两种情况下会输出什么? 提前致谢。
表达式 /bookstore/*
将 select 个子节点,/bookstore
将 select 节点本身。
例如,/bookstore/*
将 select /bookstore
下的所有子元素 ,因此您最终可能会得到一个元素集合。请注意,如果这是一个更复杂的表达式,如 /bookstore/book/*
并且有多个 /bookstore/book
元素,则所有匹配节点的所有子节点都是 selected.
表达式 /bookstore
将 select 只有元素 /bookstore
。与上面类似,如果它沿着像 /bookstore/book
.
假设以下简单输入文档:
<bookstore>
<book/>
<book/>
</bookstore>
现在,表达式
/bookstore
表示
Select an element named
bookstore
, but only if it is the outermost element of the document
在格式良好的 XML1 中只能有一个最外层元素,所以上面的路径表达式只会 select 最多一个元素节点.
/bookstore/*
表示
Select an element named
bookstore
, but only if it is the outermost element of the document. Then, select all its immediate child elements, regardless of their name.
1 正如 Michael Kay 指出的那样,除非您以编程方式构建 XML 树。然后,可能有多个最外层元素。
then in case of /bookstore/* out put wil not contain
<bookstore>
and</bookstore>
我可以看到两种阅读此问题的方法。
为什么 <element>
和 </element>
都是?
将 <bookstore>
和 </bookstore>
视为 一个单一元素 。它们是该元素的开始和结束 tag。一旦输入文档被读入内存,它就会存储在树状结构中(例如 DOM), 没有开始和结束标签 。您评估 XPath 表达式所依据的就是这种表示。
但是,如果您输出对 XPath 表达式求值的结果,则结果树会再次序列化,并且标签会重新出现 - 这可能会造成混淆。
是否在路径 selected 中提到了所有元素?
不,在像
这样的表达式中/bookstore/book
只有 book
个元素节点被 select 编辑。只有最右边的项目,就在最后一个 axist step 之后(例如 /
和 parent::
)被 selected.