2013-03-11 125 views
0

即使文件已损坏,是否有读取XML文件的方法?在写入XML文件时读取XML文件PHP

我试图在文件被写入并输出时得到一个XML文件,但由于根元素没有关闭,因为它正处于写入过程中,所以我得到一个坏的错误。

是否有反正如何实现这一目标?

+0

我们可以问你为什么要达到这个目的吗?等待文件写入完成然后抓取有什么问题? – 2013-03-11 19:29:42

+0

由于文件是一个大文件,需要一段时间才能完成,因此我想在完成之前输出内容。 – 2013-03-11 19:30:47

+0

是否需要_need_'xmlreader'或者'DOMDocument'好? – Wrikken 2013-03-11 19:33:24

回答

1
$broken ='<root> 
    <item>foo</item>'; 

$d = new DOMDocument(); 
$d->loadXML($broken); 
echo $d->saveXML($d); // useless, only prologue 
$d->recover = true; // <-- it's limited, but will try its best. 
$d->loadXML($broken); 
echo $d->saveXML($d); 
/* 
* <?xml version="1.0" encoding="UTF-8"?> 
* <root> 
* <item>foo</item></root> 
*/ 
+0

我必须先保存固定的XML文件? – 2013-03-11 19:47:24

+0

如果你愿意......我只用' - > saveXML()'作为一种方法来显示它是否尽可能多地恢复了XML。在调用' - > loadXML()'后,你可以用'DOMDocument'完成任何你想做的事情。 – Wrikken 2013-03-11 19:49:06

+0

谢谢,是否可以删除页面顶部的错误? – 2013-03-11 19:52:49

0

请使用文件锁定或使您的写入原子,以便其他进程不会看到一半写入的文件。有关这两种方法的代码,请参阅this answer的中间部分。

您还可以通过为您处理并发性的事情来调解您的写入,并为您提供一致的读取和写入操作,即数据库。它不一定是一个完整的独立进程 - 你可以使用sqlite或简单的key-value store