我有以下几种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/>
之后,要么紧随其后的兄弟姐妹的第一个字符串,但是,如果该兄弟姐妹的任何后代元素中的“。”之前没有文本,则不会这样。
因此,用通俗易懂的话:第一个文本(如紧靠元素后的实际结束符“>”一样。我将如何实现?