duanqu9292 2015-10-27 13:10
浏览 36

更改\ XMLReader的Zend \ Dom \ Document

I need to change from using: Zend\Dom\Document and Zend\Dom\Document\Query to using XMLReader, as parsing the DOM Document way ends up using too much memory.

This is the line I need to replace with XMLReader() [looping per line?]:

$pages = Query::execute('//page[@id=45894]|//node[@id=45894]|//node[@id=45894]/node|//node[@id=45894]/node/node', $domDocument);

What I'm unsure about is doing the same XPath query with one loop ?

EDIT: I came across hakre's xmlreader-iterators and have now tried:

if (get_class($reader) === Document::class) {
    /** @var Document $reader */
    $nodes = Query::execute($queryXpath, $reader);
} elseif (get_class($reader) === XMLReaderInterface::class) {
    /** @var XMLReaderInterface $reader */
    $nodes = null;

    $xmlElementIterator = new \XMLElementIterator($reader);
    $nodes = new \XMLElementXpathFilter($xmlElementIterator, $queryXpath);

    $doc = new \DOMDocument();
    $doc->createElement('root');
    foreach ($nodes as $node) {
        /* @var $node \XMLReaderNode */
        $element = $node->getSimpleXMLElement();
        $domElement = dom_import_simplexml($element);
        $doc->appendChild($doc->importNode($domElement));
    }

    $nodes = $doc->childNodes;

    $reader->reset();
} else {
    throw new \Exception('Invalid reader type, must use for example: Document or XMLReader.');
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 Java-Oj-桌布的计算
    • ¥15 请问如何在openpcdet上对KITTI数据集的测试集进行结果评估?
    • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
    • ¥20 有人知道这种图怎么画吗?
    • ¥15 pyqt6如何引用qrc文件加载里面的的资源
    • ¥15 安卓JNI项目使用lua上的问题
    • ¥20 RL+GNN解决人员排班问题时梯度消失
    • ¥60 要数控稳压电源测试数据
    • ¥15 能帮我写下这个编程吗
    • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路