从XPath获取文本但想要元素?

时间:2017-07-05 18:52:15

标签: xml xslt xpath xpath-2.0 xpathnavigator

我是XPath的新手所以请耐心等待。基本问题。

我想选择文字,包括元素。以下示例输入:

<node2>
    <node3>A1</node3>
    <node3>A2</node3>
    <node3>A3</node3>
    <node3>A4</node3>    
</node2> 

我希望复制包含标签的节点2的内容,即:

/node1/node2/

但是,如果我使用XPath A1 A2 A3 A4,我只会获得值node2(而不是node3ListBox_AfterUpdate()标记。)

5 个答案:

答案 0 :(得分:0)

xpath /node1/node2应返回nodes列表。每个node,取决于您使用的语言包含nodeNamenodeValue等属性,您可以使用这些属性来访问包含的文本和标记的名称。

答案 1 :(得分:0)

  

但是,如果我将xpath用作/node1/node2 - 我只会获得值A1 A2 A3 A4(而不是node2node3标记。)

<强>不正确即可。 XPath,/node1/node2选择node2的{​​{1}} 元素 子项,而不是文本节点或字符串。如果你只看到node1这个XPath,那么你在一个自动转换为字符串值的上下文中评估XPath。

您不需要新的XPath;您需要评估已有的不同XPath的结果。例如,如果您正在使用

A1 A2 A3 A4

您应该迭代节点集或将模板应用于节点集中的所有元素,

<xsl:value-of select="/node1/node2"/>

或在XSLT 2.0中,返回一个序列,

<xsl:apply-templates select="/node1/node2"/>

等,具体取决于您对所选元素的确切需求。

答案 2 :(得分:0)

./node1/node()

或:

./node1/node2/../node()

如果需要整个HTML节点,请使用/ node()结束Xpath。

答案 3 :(得分:0)

选择node2元素及其内部的所有内容:

  

xPath://node2/descendant-or-self::*

     

css:node2,node2 *

仅选择没有node2标记的内部内容:

  

xPath://node2/descendant::*

     

css:node2 *

答案 4 :(得分:-1)

Correct XPath query to fetch div inner text

使用text()函数:

//node1/node2/text()