【发布时间】:2019-11-09 13:42:15
【问题描述】:
我有以下 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 string xpath xpath-2.0