xml – XPath – 节点()和文本()之间的差异

前端之家收集整理的这篇文章主要介绍了xml – XPath – 节点()和文本()之间的差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法理解text()和node()之间的区别。从我的理解,text()将是标签< item> apple< / item>在这种情况下是苹果。节点将是该节点实际上是什么,这将是项目

但是,我被分配了一些工作,它要求我“选择生产下所有项目的文本”,一个单独的问题询问“选择所有部门的所有经理节点”

输出如何看待text()而不是node()

snip的XML

<produce>
 <item>apple</item>
 <item>banana</item>
 <item>pepper</item>
</produce>

<department>
 <phone>123-456-7891</phone>
 <manager>John</manager>
</department>

当然,有更多的部门和更多的经理,但这只是一小段代码

任何帮助将非常感谢!

text()和node()是XPath术语( compare)中的节点测试。

节点测试对一组(在axis,准确地)节点进行操作,并返回某种类型的节点。当未提及轴时,默认情况下采用子轴。

有各种node tests

> node()匹配任何节点(它们的最小特定节点test)
> text()仅匹配文本节点
> comment()匹配注释节点
> *匹配任何元素节点
> foo匹配任何名为“foo”的元素节点
> processing-instruction()匹配PI节点(它们看起来像<?name value?>)。
>旁注:*也匹配属性节点,但只沿属性轴。 @ *是attribute :: *的缩写。属性不是子轴的一部分,这就是为什么正常*不选择它们。

这个XML文档:

<produce>
    <item>apple</item>
    <item>banana</item>
    <item>pepper</item>
</produce>

表示以下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()选择所有子文本节点(只有一个 – “apple” – 在这种情况下)

等等。

所以,你的问题

>“选择生产下的所有项目的文本”/ produce / item / text()(选择3个节点)
>“选择所有部门中的所有管理器节点”// department / manager(选择1个节点)

笔记

> XPath中的默认轴是子轴。您可以通过为其他轴名称添加前缀来更改轴。例如:// item / ancestor :: produce
>元素节点具有文​​本值。当评估元素节点时,将返回其文本内容。在本例中,/ produce / item [1] / text()和string(/ produce / item [1])将是相同的。
>另请参见this answer,其中我以图形方式概述XPath表达式的各个部分。

原文链接:https://www.f2er.com/xml/293873.html

猜你在找的XML相关文章