Pzt*_*tar 57 xml xpath expression
我无法理解之间的差异text()和node().根据我的理解,在这种情况下text(),标签之间的任何东西<item>apple</item>都是苹果.节点将是节点实际上的任何节点,这将是项目
但后来我被分配了一些工作,它要求我"选择生产中所有项目的文本",另一个问题是"选择所有部门中的所有经理节点"
输出如何看起来text()与之相反node()
XML片段:
<produce>
<item>apple</item>
<item>banana</item>
<item>pepper</item>
</produce>
<department>
<phone>123-456-7891</phone>
<manager>John</manager>
</department>
Run Code Online (Sandbox Code Playgroud)
当然,有更多的部门和更多的经理,但这只是一小段代码.
任何帮助将非常感激!
Tom*_*lak 123
text()并且node()是XPath术语中的节点测试(比较).
节点测试对节点(在一个轴上,准确地说)节点进行操作,并返回某种类型的节点.如果未提及child轴,则默认采用轴.
有各种节点测试:
node()匹配任何节点(所有节点的最少特定节点测试)text()仅匹配文本节点comment()匹配评论节点*匹配任何元素节点foo 匹配任何名为的元素节点 "foo"processing-instruction()匹配PI节点(它们看起来像<?name value?>).*也匹配属性节点,但仅沿attribute轴.@*是一个简写attribute::*.属性不是child轴的一部分,这就是法线*不选择它们的原因.这个XML文档:
<produce>
<item>apple</item>
<item>banana</item>
<item>pepper</item>
</produce>
Run Code Online (Sandbox Code Playgroud)
代表以下DOM(简化):
root node
element node (name="produce")
text node (value="\n ")
element node (name="item")
text node (value="apple")
text node (value="\n ")
element node (name="item")
text node (value="banana")
text node (value="\n ")
element node (name="item")
text node (value="pepper")
text node (value="\n")
所以使用XPath:
/ 选择根节点/produce如果它具有名称,则选择根节点的子元素"produce"(这称为文档元素 ;它表示文档本身.文档元素和根节点经常混淆,但它们不是同一个东西.)/produce/node()选择任何类型的子节点的下方/produce/(即,所有7个孩子)/produce/text() 选择4(!)仅空白文本节点/produce/item[1] 选择名为的第一个子元素 "item"/produce/item[1]/text()选择所有子文本节点(只有一个 - "苹果" - 在这种情况下)等等.
所以,你的问题
/produce/item/text()(选择3个节点)//department/manager(选择1个节点)笔记
child轴.您可以通过为不同的轴名称添加前缀来更改轴.例如://item/ancestor::produce /produce/item[1]/text()和string(/produce/item[1])将是相同的.| 归档时间: |
|
| 查看次数: |
124719 次 |
| 最近记录: |