我成功地使用以下代码将多个大型 XML 文件合并到一个新的(更大的)XML 文件中。在 StackOverflow 上找到了至少部分内容
$docList = new DOMDocument(); $root = $docList->createElement('documents'); $docList->appendChild($root); $doc = new DOMDocument(); foreach(xmlFilenames as $xmlfilename) { $doc->load($xmlfilename); $xmlString = $doc->saveXML($doc->documentElement); $xpath = new DOMXPath($doc); $query = self::getQuery(); // this is the name of the ROOT element $nodelist = $xpath->evaluate($query, $doc->documentElement); if( $nodelist->length > 0 ) { $node = $docList->importNode($nodelist->item(0), true); $xmldownload = $docList->createElement('document'); if (self::getShowFileName()) $xmldownload->setAttribute("filename", $filename); $xmldownload->appendChild($node); $root->appendChild($xmldownload); } } $newXMLFile = self::getNewXMLFile(); $docList->save($newXMLFile);
当文件数量随着文件大小的增加而增加时,我开始遇到内存不足的问题。
我在这里找到了一篇文章,它解释了这个问题并推荐使用 XMLWriter
因此,现在尝试使用 PHP XMLWriter 将多个大型 XML 文件合并到一个新的(更大的)XML 文件中。稍后,我将对新文件执行 xpath。
代码:
$xmlWriter = new XMLWriter(); $xmlWriter->openMemory(); $xmlWriter->openUri('mynewFile.xml'); $xmlWriter->setIndent(true); $xmlWriter->startDocument('1.0', 'UTF-8'); $xmlWriter->startElement('documents'); $doc = new DOMDocument(); foreach($xmlfilenames as $xmlfilename) { $fileContents = file_get_contents($xmlfilename); $xmlWriter->writeElement('document',$fileContents); } $xmlWriter->endElement(); $xmlWriter->endDocument(); $xmlWriter->flush();
好吧,生成的(新)xml 文件不再正确,因为元素被转义 - 即 <?xml version="1.0" encoding="UTF-8"?>
<CONFIRMOWNX>
<Confirm>
<LglVeh id="GLE">
<AddrLine1>GLEACHER &amp; COMPANY</AddrLine1>
<AddrLine2>DESCAP DIVISION</AddrLine2>
谁能解释如何从 XML 文件中获取内容并将它们正确写入新文件?
我对此感到厌烦,我知道这将是我想念的简单事物。
谢谢。罗伯特