How do I extract any text preceding a certain node using XPath 1.0?
我需要一个XPath表达式来选择节点之前的任何文本,而不管其结构和层次结构如何。
例如,在以下情况下如何提取节点
情况1:
1 2 3 | 1 2 <target/> |
预期结果:2
情况2:
1 2 3 4 5 | <p>1</p> <do> <bt>2</bt> </do> <target/> |
预期结果:2
情况3:
1 2 | Text child text</aa> <target/> |
预期结果:"子文本"或"文本子文本"
情况4:
1 2 | <p>Text child text tail</p> <target/> |
预期结果:" tail"," text tail"或" text child text tail"
依此类推,可能有尽可能多的情况。
实际上,我想要的只是前面文本的最后一个字符,因此结果是否包含来自任何嵌套中间子元素的文本都没有关系。
1 | //target/preceding::text()[normalize-space(.) != ''][1] |
[1]而不是[last()],因为前一个命令将节点向后排序。
还有[normalize-space(。)!= \\'\\'],因为我们不希望仅由空格组成的文本节点。