我想提取元素结束标记之前的文本节点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
。例如,对于此示例 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>
标记之前的文本节点。对于您的示例,它返回
1, 3
。当您使用时,
//a/text()[last()]
您只查看每个a
元素的子文本节点,抓取last()
文本节点而不考虑它与其周围可能存在的任何同级节点的关系。下面将抓取每个
a
元素的最后一个子元素(无论其类型如何),然后仅当它实际上是一个文本节点时才返回它://a/node()[last()][self::text()]
它将
1, 3
在您的示例中返回。