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

Moa*_*oak 41 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>
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*hev 43

在提供的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> 
Run Code Online (Sandbox Code Playgroud)

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

用途:

/div/text()[last()]
Run Code Online (Sandbox Code Playgroud)

这不同于:

/div/text()
Run Code Online (Sandbox Code Playgroud)

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

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

/div/text()[normalize-space()]
Run Code Online (Sandbox Code Playgroud)

这将选择所有text-node-children/div不属于whitespace-only文本节点.

  • @Dimitre,只是因为没有人说所需文本将是最后一个节点? (5认同)
  • @Dimitre,问题是获取没有子节点文本的文本。仅获取最后一个文本节点适用于给定的示例,但通常不能回答问题。 (2认同)

Luc*_*ero 13

只需选择text()而不是.:

div/text()
Run Code Online (Sandbox Code Playgroud)

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

Lorem ipsum dolor sit amet.
Run Code Online (Sandbox Code Playgroud)