如何选择结束标签之前的文本节点,但仅当有这样一个文本节点时

问题描述 投票:0回答:2

我想提取位于

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
的结束标记之前”。

xpath
2个回答
3
投票

试试这个

//a/text()[not(following-sibling::node())]

它直接选择结束

</a>
标签之前的文本节点。

对于您的示例,它返回

1, 3


2
投票

当您使用

//a/text()[last()]
时,您仅查看每个
a
元素的子文本节点,抓取
last()
文本节点,而不考虑它与其周围可能的任何兄弟节点的关系。

以下内容将获取每个

a
元素的最后一个子元素,无论其类型如何,然后仅当它实际上是文本节点时才返回它:

//a/node()[last()][self::text()]

在您的示例中它将返回

1, 3

© www.soinside.com 2019 - 2024. All rights reserved.