如何使用XPath 1.0提取某个节点之前的任何文本?

时间:2017-07-20 14:15:53

标签: xml xpath xpath-1.0

我需要一个XPath表达式来选择节点之前的任何文本,而不管结构和层次结构如何。 例如,在以下情况下,如何在节点<target/>之前提取文本:

案例1:

<a>1</a>
<b>2</b>
<target/>

预期结果:2

案例2:

<p>1</p>
<do>
  <bt>2</bt>
</do>
<target/>

预期结果:2

案例3:

<aa>Text <b>child text</b></aa>
<target/>

预期结果:'子文字'或'文字儿童文字'

案例4:

<p>Text <b>child text</b> tail</p>
<target/>

预期结果:'tail','text tail'或'text child text tail'

依此类推,可能会有尽可能多的案例。 实际上,我想要的只是前一个文本的最后一个字符,所以结果是否包含任何嵌套的中间子元素的文本都无关紧要。

1 个答案:

答案 0 :(得分:3)

//target/preceding::text()[normalize-space(.) != ''][1]

[1]而不是[last()],因为之前命令节点向后。 并且[normalize-space(。)!='']因为我们不希望文本节点只包含空格。