我必须遵循以下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可能性:
怎么样:“只要以<metamark>
开头的任何'.'
之后的第一个文本节点,”
//metamark[not(descendant::text())]/following::text()[1][starts-with(., '.')]