3

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 把它分解成不同的文件。

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

4

1 回答 1

2

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

$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 prolog 和一个 DocType 的巨大 XML 文件(注意我假设 DocType 对于文件中的所有文档都是相同的)。然后,您可以通过遍历各个根元素来处理文件。

于 2012-05-28T08:10:17.537 回答