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声明。 BTW,文件大小500MB。 我想请求帮助如何解析这个文件,而不是使用PHP将其分解成不同的文件。
任何帮助将不胜感激。 谢谢..
答案 0 :(得分: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文件,只有一个XML prolog和一个DocType(注意我假设DocType对于文件中的所有文档都是相同的)。然后,您可以通过迭代各个根元素来处理该文件。