xml - XPath选择所有同级和子节点,直到下一个自封闭元素的下一次出现

标签 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>元素(或可能存在的任何其他元素)。

编辑:进一步澄清,我试图仅选择出现在例如第一个里程碑元素,直到但不包括<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/

相关文章:

xml - 有没有办法用垂直对齐方式漂亮地打印 XML?

xml - powershell,xml,如何区分和元素

java - 在 Java 中检索 XML 文件的节点列表

xml - XPath:仅基于 text() 获取以下 sibling

java selenium xpath 获取字符串值

xpath - 如何在 XPath 中选择 bool 值节点?

java - xacml实现简介

xml - 使用 Powershell 在具有命名空间的 XML 中选择具有 Xpath 的属性

xml - 使用 colspec、namest 和 nameend 的 xsl cals 表 : span cells,

xpath - 使用 SoapUi 模拟 2 个变量的响应