<div type="chapter">
<head>Chapter I</head>
<milestone n="m_one" xml:id="ch1sc1" unit="scene"/>
<p>...</p>
<p>...</p>
<milestone n="m_two" xml:id="ch1sc2" unit="scene"/>
<p>...</p>
<p>...</p>
<milestone n="m_three" xml:id="ch1sc2" unit="scene"/>
</div>
是否可以使用XPath选择在这种情况下
<milestone />
的第一个自封闭元素之间的所有节点,直到下一个<milestone />
元素的下一次出现。换句话说,仅选择
<p>
元素(或可能存在的任何其他元素)。编辑:进一步澄清,我试图仅选择出现在例如第一个里程碑元素,直到但不包括
<milestone />
元素的下一次出现
最佳答案
实际上,这样的任务将更适合嵌入XPath的语言(例如Java,PHP或XSLT)。为什么?因为您的XML数据(我怀疑是TEI)的排列方式使其难以操作,例如,因为div
元素内没有嵌套。高级语言可以更好地检索结构不正确的数据(即您所需的数据)。
举个例子,在XSLT中,当出现xsl:for-each-group
元素时,可以使用分组机制(milestone
)开始新的分组。
在纯XPath中,以下方法可能有效(我现在无法对其进行测试):
//milestone[1]/following-sibling::p except //milestone[2]/following-sibling::p
关于xml - XPath选择所有同级和子节点,直到下一个自封闭元素的下一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390106/