PHP 删除大型 XML 字符串的根节点



我们处理大型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);

相关内容

  • 没有找到相关文章

最新更新