<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>
元素(或可能存在的任何其他元素)。
编辑:进一步说明我试图仅选择出现在例如p中的p元素。第一个里程碑元素直到但不包括<milestone />
元素的下一个出现
答案 0 :(得分:1)
实际上,这样的任务更适合您嵌入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