如何使用 XPath 1.0 提取某个节点之前的任何文本?
How do I extract any text preceding a certain node using XPath 1.0?
我需要单个 XPath 表达式来 select 节点之前的任何文本,无论结构和层次如何。
例如,在以下情况下如何提取节点 <target/>
之前的文本:
案例一:
<a>1</a>
<b>2</b>
<target/>
预期结果:2
案例二:
<p>1</p>
<do>
<bt>2</bt>
</do>
<target/>
预期结果:2
案例三:
<aa>Text <b>child text</b></aa>
<target/>
预期结果:'child text'或'Text child text'
案例四:
<p>Text <b>child text</b> tail</p>
<target/>
预期结果:'tail'、'text tail' 或 'text child text tail'
以此类推,越多越好。
实际上,我想要的只是前面文本的最后一个字符,所以结果是否包含来自任何嵌套中间子元素的文本并不重要。
//target/preceding::text()[normalize-space(.) != ''][1]
[1] 而不是 [last()] 因为前面的节点向后排序。
而 [normalize-space(.) != ''] 因为我们不希望文本节点只包含白色 space。
我需要单个 XPath 表达式来 select 节点之前的任何文本,无论结构和层次如何。
例如,在以下情况下如何提取节点 <target/>
之前的文本:
案例一:
<a>1</a>
<b>2</b>
<target/>
预期结果:2
案例二:
<p>1</p>
<do>
<bt>2</bt>
</do>
<target/>
预期结果:2
案例三:
<aa>Text <b>child text</b></aa>
<target/>
预期结果:'child text'或'Text child text'
案例四:
<p>Text <b>child text</b> tail</p>
<target/>
预期结果:'tail'、'text tail' 或 'text child text tail'
以此类推,越多越好。 实际上,我想要的只是前面文本的最后一个字符,所以结果是否包含来自任何嵌套中间子元素的文本并不重要。
//target/preceding::text()[normalize-space(.) != ''][1]
[1] 而不是 [last()] 因为前面的节点向后排序。 而 [normalize-space(.) != ''] 因为我们不希望文本节点只包含白色 space。