如何使用PHP解析具有多个xml声明的xml文件?(几个 XML 文件的串联) [英] How to parse an xml file with multiple xml declaration using PHP? (A concatenation of several XML files)

查看:33
本文介绍了如何使用PHP解析具有多个xml声明的xml文件?(几个 XML 文件的串联)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

xml 格式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE >
<root>
 <node>
  <element1></element1>
  <element2></element2>
  <element3></element2>
  <element4></element3>  
</node>
</root>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE >
<root>
 <node>
  <element1></element1>
  <element2></element2>
  <element3></element2>
  <element4></element3>  
</node>
</root>

以及之后的几个 xml 声明.顺便说一句,文件大小为 500MB.我想寻求帮助,如何在不使用 PHP 将其分解为不同文件的情况下解析此文件.

and several more xml declarations after. BTW, the file size 500MB. I would like to ask for help how to parse this file without breaking it up into different files using PHP.

任何帮助将不胜感激.谢谢..

Any help would be appreciated. Thank you..

推荐答案

如果您不想拆分文件,则必须在内存中使用它.鉴于您的 500MB 文件大小,这可能会出现问题.无论如何,一种选择是从所有文档中删除 XML Prolog 和 DocType,然后像这样加载整个内容:

If you do not want to split the file, you will have to work with it in memory. Given your 500MB file size, this could turn out problematic. Anyway, one option would be to remove the XML Prolog and DocType from all documents and then load the whole thing like this:

$dom = new DOMDocument;
$dom->loadXML(
    sprintf(
        '<?xml version="1.0" encoding="UTF-8"?>%s' .
        '<!DOCTYPE >%s' . 
        '<roots>%s</roots>',
        PHP_EOL, 
        PHP_EOL, 
        str_replace(
            array(
                '<?xml version="1.0" encoding="UTF-8"?>', 
                '<!DOCTYPE >'
            ),
            '',
            file_get_contents('/path/to/your/file.xml')
        )
    )
);

这将使它成为一个巨大的 XML 文件,只有一个 XML prolog 和一个 DocType(注意我假设文件中的所有文档的 DocType 是相同的).然后,您可以通过遍历各个根元素来处理文件.

This would make it one huge XML file with just one XML prolog and one DocType (note I am assuming the DocType is the same for all documents in the file). You could then process the file by iterating over the individual root elements.

这篇关于如何使用PHP解析具有多个xml声明的xml文件?(几个 XML 文件的串联)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆