Xpath:紧随元素后的第一个字母/字符串

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

我必须遵循以下XML可能性:

<metamark/><anything>. <anything2>bla</anything2>.</anything>
<metamark/>.<anything> <anything2>bla</anything2>.</anything>
<metamark/><anything><anything2>bla</anything2>.</anything>

我想获得第一个“。”所以我尝试了:

starts-with(metamark[not(descendant::text())]/following-sibling::text()[1],'.')

对于上面的第2行工作正常,但是我错过了第1行。所以我做到了:

starts-with(metamark[not(descendant::text())]/following-sibling::text()[1],'.') or starts-with(metamark[not(descendant::text())]/following-sibling::*[1]/text()[1],'.')

现在适用于以上所有行。但是,第3行不应该是真实的,因为我只想要“。”。紧接在空<metamark/>之后或紧随其后的兄弟姐妹的第一个字符串,但如果该兄弟姐妹的任何后代元素中的“。”之前没有文本,则不是这样。

因此,用通俗易懂的话:第一个文本(如紧靠元素后的实际结束符“>”一样。如何实现?

我必须遵循以下XML可能性:

xml string xpath xpath-2.0
1个回答
1
投票

怎么样:“只要以<metamark>开头的任何'.'之后的第一个文本节点,”

//metamark[not(descendant::text())]/following::text()[1][starts-with(., '.')]
© www.soinside.com 2019 - 2024. All rights reserved.