首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和XMLWriter

PHP和XMLWriter
EN

Stack Overflow用户
提问于 2012-11-10 12:07:08
回答 2查看 4.5K关注 0票数 2

我使用以下代码成功地将多个大型文件合并到一个新的(更大的)文件中,这是成功的。至少在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文件中。稍后,我将对新文件执行xpath。

代码:

$xmlWriter =新的XMLWriter();$xmlWriter->openMemory();$xmlWriter->openUri('mynewFile.xml');$xmlWriter->setIndent(真);$xmlWriter->startDocument('1.0','UTF-8');$xmlWriter->startElement('documents');$doc =新DOMDocument();foreach($xmlfilenames as $xmlfilename) { $fileContents = file_get_contents($xmlfilename);$xmlWriter->写endElement(‘document’,$fileContents);} $xmlWriter->endElement();$xmlWriter->endElement();$xmlWriter->file_get_contents($xmlfilename);

好的,结果(新的) xml文件不再是正确的,因为元素是转义的。

代码语言:javascript
复制
<CONFIRMOWNX>
<Confirm>
<LglVeh id="GLE">
<AddrLine1>GLEACHER & COMPANY</AddrLine1>
<AddrLine2>DESCAP DIVISION</AddrLine2>

有人能解释如何从XML文件中获取内容并正确地将它们写入新文件吗?

我对这件事很感兴趣,我知道我会错过一些简单的东西。

谢谢。罗伯特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-10 12:58:27

问题是,XMLWriter::writeElement的目的是编写一个完整的XML元素。这就是为什么它会自动清除(例如,用&替换为& )传递给它的内容作为第二个param。

一种可能的解决方案是使用XMLWriter::writeRaw方法代替,因为它按原样写入内容,而不进行任何消毒。显然,它没有验证其输入,但在您的示例中,它似乎不是一个问题(因为您正在使用已经检查过的源)。

票数 4
EN

Stack Overflow用户

发布于 2012-11-10 12:24:19

嗯,不知道为什么要把它转换成HTML字符,但是您可以这样对它进行解码

htmlspecialchars_decode($data);

它将特殊的HTML实体转换回字符。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13321892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档