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 处理我们的小型子树