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

问题描述 投票:39回答:3

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

<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.

xpath xquery
3个回答
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文本节点的/div的所有whitespace-only


13
投票

只需选择text()而不是.

div/text()

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

Lorem ipsum dolor sit amet.

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.