我们处理大型XML字符串(超过1Gb),并希望删除它们的根节点。以下代码适用于 simplexml,但在创建结构的整个对象树时会破坏我们服务器的 ram 使用。
$content = '<content with="random" attributes="hello"><file>text which is over 1gb with sub nodes</file><file>another large text</file></content>';
$xml = new SimpleXMLElement($content);
echo $xml->children()->saveXML();
有没有一种 ram 友好的方法来删除大型 XML 字符串的根节点?
您不应该这样做,因为如果您尝试,您的 XML 将变得无效。每个定义必须只有一个根节点。
如果你真的想去掉<content>
标签,试试用REGEX或substring()。也许您应该考虑将每个<file>
保存到单独的 XML 文件中。
最后我想
出了以下解决方案:
$xml = '<content with="random" attributes="hello"><file>text which is over 1gb with sub nodes</file><file>another large text</file></content>';
$pos = strpos($xml, '>', strpos($xml, 'content'));
if ($pos !== false)
$xml = substr($xml, $pos + 1, - 11);