XMLReader::expand() 将当前子树扩展到 DOM。SimpleXML 也不错。为了避免使用 simplexml_import_dom() 时出现类似“导入的节点必须具有关联的文档”的警告,我们可以这样做
<?php
// 巨大的压缩 XML 文件
$xml = XMLReader::open('compress.zlib:///path/to/my-data.xml.gz');
// 针对一个小子树
while ($xml->name !== 'my-targeted-element') {
$xml->read();
}
// 技巧在这里...
// 子树在一个空文档中扩展...
$dom = $xml->expand(new DOMDocument());
// ... 可以通过 SimpleXML 导入
$sx = simplexml_import_dom($dom);
// 现在我们可以使用 SimpleXML $sx 处理我们的一个小子树