我想提取位于
a
元素的结束标记之前的文本节点。例如,使用此示例 XML:
<root>
<a/>
<a>1</a>
<a>2<b/>3</a>
<a>4<b/></a>
<a><b/>5<c/></a>
</root>
预期结果将是序列
( 1, 3 )
表达式
//a/text()[last()]
还不够,因为它返回 ( 1, 3, 4, 5 )
,我的问题是我不知道如何添加约束:“就在 a
的结束标记之前”。
试试这个
//a/text()[not(following-sibling::node())]
它直接选择结束
</a>
标签之前的文本节点。
对于您的示例,它返回
1, 3
。
当您使用
//a/text()[last()]
时,您仅查看每个 a
元素的子文本节点,抓取 last()
文本节点,而不考虑它与其周围可能的任何兄弟节点的关系。
以下内容将获取每个
a
元素的最后一个子元素,无论其类型如何,然后仅当它实际上是文本节点时才返回它:
//a/node()[last()][self::text()]
在您的示例中它将返回
1, 3
。