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

我有以下几种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],'.')

上面的第二行工作正常,但是我错过了第一行。所以我做到了:

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

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

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

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

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

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

<r>
  <metamark/><anything>. yes1<anything2>bla</anything2>. no1</anything>
  <metamark/>. yes2<anything> <anything2>bla</anything2>. no2</anything>
  <metamark/><anything><anything2>bla</anything2>. no3</anything>
</r>

此检索

'. yes1'
'. yes2'

following::轴会忽略嵌套,这对于此任务很有用。

本文链接:https://www.f2er.com/3132689.html

大家都在问