XPath – node()和text()之间的区别
我无法理解text()和node()之间的区别。 据我所知, text()将是苹果在这种情况下的标签<item>apple</item>之间的任何东西。 节点将是什么节点实际上,这将是项目 
但后来我被分配了一些工作,要求我“select产品下所有项目的文本”,另一个问题是“select所有部门中的所有pipe理器节点”
 输出如何看起来像text()而不是node() 
XML的片段
 <produce> <item>apple</item> <item>banana</item> <item>pepper</item> </produce> <department> <phone>123-456-7891</phone> <manager>John</manager> </department> 
当然,有更多的部门和更多的pipe理者,但这只是一个代码片段。
任何帮助将不胜感激!
 在XPath术语( 比较 )中, text()和node()是节点testing 。 
 节点testing对一组节点(精确地说是一个节点)进行操作,并返回那些具有某种types的节点。 当没有提到轴时,默认情况下假设child轴。 
有各种节点testing :
-   node()匹配任何节点(它们都是最不特定的节点testing)
-   text()仅匹配文本节点
-   comment()匹配注释节点
-   *匹配任何元素节点
-   foo匹配任何名为"foo"元素节点
-   processing-instruction()匹配PI节点(它们看起来像<?name value?>)。
-   注意: *还可以匹配属性节点,但只能沿着attribute轴。@*是attribute::*的缩写。 属性不是child轴的一部分,这就是为什么普通的*不select它们。
这个XML文件:
 <produce> <item>apple</item> <item>banana</item> <item>pepper</item> </produce> 
代表以下DOM(简化):
根节点
   元素节点(name =“produce”)
      文本节点(值=“\ n”)
      元素节点(name =“item”)
         文本节点(值=“苹果”)
      文本节点(值=“\ n”)
      元素节点(name =“item”)
         文本节点(值=“香蕉”)
      文本节点(值=“\ n”)
      元素节点(name =“item”)
         文本节点(值=“胡椒”)
      文本节点(值=“\ n”)
所以XPath:
-   /select根节点
-  如果它有名字"produce"(这称为文档元素 ,它代表文档本身,文档元素和根节点通常是混淆的,但它们不是相同的东西),则select根节点的子元素。
-   /produce/node()select任何types的子节点/produce/(即所有7个孩子)
-   /produce/text()select4(!)只有空白的文本节点
-   /produce/item[1]select名为"item"的第一个子元素
-   /produce/item[1]/text()select所有的子文本节点(这里只有一个 – “apple”)
等等。
所以,你的问题
-   “select产品下所有项目的文本” /produce/item/text()(select3个节点)
-   “select所有部门中的所有经理节点” //department/manager(select1个节点)
笔记
-   XPath中的默认轴是child轴。 您可以通过在不同的轴名称前面添加轴来更改轴。 例如://item/ancestor::produce
-  元素节点具有文本值。 当你评估一个元素节点时,它的文本内容将被返回。 在这个例子中, /produce/item[1]/text()和string(/produce/item[1])将是相同的。
- 另请参见此答案 ,其中以graphics方式概述了XPathexpression式的各个部分。
select产品下所有项目的文本:
 //produce/item/text() 
select所有部门的所有经理节点:
 //department/*