我需要一个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'
依此类推,可能会有尽可能多的案例。 实际上,我想要的只是前一个文本的最后一个字符,所以结果是否包含任何嵌套的中间子元素的文本都无关紧要。
答案 0 :(得分:3)
//target/preceding::text()[normalize-space(.) != ''][1]
[1]而不是[last()],因为之前命令节点向后。 并且[normalize-space(。)!='']因为我们不希望文本节点只包含空格。