2013-03-11 124 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