情况如下:我有一些表示长格式文档记录的 XML 文件,其中分页符用 void 元素表示:<pb />。
我想要做的是构建某种数据结构(数组很好),其中每个元素代表每个“页面”的有效 XML,由 pb void 元素(又名自关闭又名单例)分隔。
问题是, pb 元素可以(并且确实)出现在任何任意父节点内的任意嵌套级别。
我的想法是使用 XPath 来识别每个 pb 元素,然后以某种方式关闭所有元素的父标签 - 结束页面 - 并重新打开它们以开始下一页。我正在使用PHP DOMXpath。
下面是 XML 的示例:
<text id="foobar">
<div type="zing" n="zee">
<pb n=1 />
<p>some text</p>
<p>more text</p>
<fw><pb n=2 />page 2</fw>
<p>blah blah</p>
<p>blah blah blah blah <fw><pb n=3 /></fw> blah</p>
</div>
</text>
这就是我想要将其转换为:
<text id="foobar">
<div type="zing" n="zee">
<p>some text</p>
<p>more text</p>
<fw></fw>
</div>
</text>
<text id="foobar">
<div type="zing" n="zee">
<fw>page 2</fw>
<p>blah blah</p>
<p>blah blah blah blah <fw></fw>
</div>
</text>
<text id="foobar">
<div type="zing" n="zee">
<fw></fw> blah</p>
</div>
</text>
任何人都想到了一种聪明或优雅的方式来做到这一点?
我现在拥有的是另一个循环内的递归循环,每次迭代都有多个 xpath 查询,而且它是 fuuuugly。