2011-08-05 75 views
0

我和格式不正確輸入XML文件(即,它具有「&」而不是「 &放大器;」) 當我嘗試加載使用PHP DOM這個XML,$ doc-> load(「file.xml」)它會拋出錯誤並停止解析。加載在PHP中無效的XML DOM

有什麼方法可以加載這個未格式化的XML?不,我不能編輯源XML文件。 我曾嘗試使用$ doc-> loadHTML(),但它會在各處引發錯誤。

我想知道是否有做一個適當的方式本(如加載文件的內容,並改變它使用正則表達式或類似的東西)

回答

0

首先,檢查它的&這是造成錯誤,而不是別的東西。

無論如何,你必須修改XML才能解析它。 loadHTML中的HTML是從字符串中加載的,難道你不能用正確的替換無效字符嗎?

如果您的安裝支持PHP Tidy擴展(http://php.net/manual/en/book.tidy.php),您可以嘗試使用它進行清理,儘管根據我的經驗,它遠非萬無一失。

+0

是的,這是導致麻煩的&符號。我只是不想將所有&替換爲&-amp;原因,然後當我得到一個有效的XML作爲輸入它會導致問題。我對整潔的延伸知道不多。它看起來更像一個HTML工具,並且可以找到適合XML清理的適當函數。 – Nithin

+0

我搜索了更多,Tidy似乎解決了這個問題。這是我就是這樣做:'$配置=陣列( \t \t \t '縮進'=>真, \t \t \t '輸入的XML'=>真, \t \t \t '輸出的XML'=> TRUE); $ clean = $ tidy-> repairString(file_get_contents($ file),$ config); ' – Nithin

0

如果您確信這使得它無法驗證的唯一的事情,那麼你可以嘗試加載文件轉換成字符串file_get_contents()功能,然後搜索&通過字符串替換來改變&的成&的,然後將該字符串放入simpleXML中,如$xml = simplexml_load_string($cleaned_string);

+0

正如回覆上述海報發佈的那樣,當我加載有效的xml時,會導致問題。 – Nithin

1

在通過$doc->loadHTML(...)加載XML之前,嘗試設置$doc->validateOnParse = false;

+0

剛剛嘗試過,這似乎並沒有解決問題。 – Nithin