2010-11-16 122 views
1

我目前正在嘗試使用DOMDocument解析文檔,並且遇到了一些嚴重問題。我創建了一個在php 5.2.9上運行良好的腳本,使用DOMNode :: nodeValue來取出內容。同樣的腳本在php 5.3.3上沒有獲得任何內容 - 即使它正確地導航到正確的節點來提取內容。什麼會導致DOMNode :: nodeValue爲空?

基本上,所用的代碼如下所示:

$dom = new DOMDocument(); 
$dom->loadHTML($data); 
$dom->preserveWhiteSpace = false; 
$xpath = new DOMXpath($dom); 
$nodelist = $xpath->query($query); 
$value = $nodelist->item(0)->nodeValue; 

我檢查,以確保該項目(0)實際上是一個節點 - 它甚至正確類型的存在,但的nodeValue是空。

該腳本適用於某些文檔,但不適用於其他文檔(關於5.3.3) - 關於5.2.9它適用於所有文檔,返回正確的nodeValue。

+0

我發現這樣的問題與不同的PHP版本捆綁不同的libxml版本,所以不要丟棄它只是一個錯誤。但是,重現問題的示例文檔可能有助於診斷。 – 2010-11-16 12:03:12

回答

1

我似乎錯過了一些基本的和/或一個錯誤(雖然如果錯誤是在PHP或libxml我不知道)。基本上,通過確保使用loadHTML加載的數據是UTF-8編碼來解決問題。請注意,並非整個文檔需要使用UTF-8編碼 - 這裏的問題是元素中沒有UTF-8中的字符。然後在文檔處理中拋棄其他所有內容。

我得到的是,這基本上意味着所有的文檔內容都被拋出了 - 但結構正常工作。沒有錯誤或任何建議的內容被視爲無效。