我有一些 XML 文件,我必须读取它们并将其转换为 HTML。
XML 的格式是这样的:
<book pages="2">
<page n="1" />
<entry>
...
</entry>
<entry>
...
</entry>
<entry>
...
</entry>
<page n="2" />
<entry>
...
</entry>
<entry>
...
</entry>
<entry>
...
</entry>
<endpages />
</book>
我如何仅提取单个页面的条目数组?
提前致谢!
我建议使用 XPath 来实现这一点我原来的评论 https://stackoverflow.com/questions/47003245/how-read-between-delimiters-in-php-dom-of-a-xml-file/47005469#comment80953210_47003245,但是,我一直在使用一些 XPath 表达式来组合使用following-sibling
and preceding-sibling
但我无法让它与此 XML 结构正常工作。
执行此操作的一种有点技巧的方法是仅获取给定页码之后的所有内容,并在找到下一个页码时停止<page />
or <endpages />
元素:
$dom = new DOMDocument("1.0", "UTF-8");
$dom->load($xmlFile);
$xp = new DOMXPath($dom);
$pageNo = 2;
$list = $xp->query("/book/page[@n='" . $pageNo . "']/following-sibling::*");
foreach ($list as $node) {
if ($node->nodeName == 'page' || $node->nodeName == 'endpages') {
break;
}
echo $node->textContent . "<br />"; // <entry /> node
}
我很确定,如果 XML 文件中有很多页面并且您试图仅获取第一页的元素,那么这不会很好地执行,但就代码行而言,这是可以监督的,也许其他人对如何优化 XPath 表达式有一些想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)