XPath选择所有兄弟节点和子节点,直到下一个自封闭元素出现

时间:2014-08-19 18:05:39

标签: xml xpath

<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 />元素的下一个出现

1 个答案:

答案 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