仅直接在节点中选择文本,而不是在子节点中

时间:2010-12-19 16:50:24

标签: xpath xquery

如何在不选择子项中的文本的情况下检索节点中的文本?

<div id="comment">
     <div class="title">Editor's Description</div>
     <div class="changed">Last updated: </div>
     <br class="clear">
     Lorem ipsum dolor sit amet.
</div>

换句话说,我想要Lorem ipsum dolor sit amet.而不是Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

3 个答案:

答案 0 :(得分:41)

在提供的XML文档中:

<div id="comment">
      <div class="title">Editor's Description</div>
      <div class="changed">Last updated: </div>
      <br class="clear">
      Lorem ipsum dolor sit amet. 
</div> 

顶部元素/div有4个子节点,它们是文本节点。这四个text-node孩子中的前三个是whitespace-only。这4个text-node孩子中的最后一个是被通缉的孩子。

使用

/div/text()[last()]

这与

不同
/div/text()

后者可能(取决于XML解析器是否保留whitespace-only个节点)选择所有4个文本节点,但您只需要最后一个节点。

另一种选择是(当您不确切知道自己想要的text-node时):

/div/text()[normalize-space()]

这会选择text-node-children/divwhitespace-only文本节点的{{1}}。

答案 1 :(得分:13)

只需选择text()代替.

div/text()

在给定的XML片段上,返回:

Lorem ipsum dolor sit amet.

答案 2 :(得分:0)

这个怎么样:
$doc/node()[3]/text()
假设$ doc有xml。