2016-05-23 72 views
0

我有一個.xml文件(原始超過7000行,但對於測試,我一直只使用一行只有3行,以防大小是我的問題,但它不是' t)我想從中提取數據。然而,作爲一個自動生成的東西,它並不十分漂亮,觀察:使用php從(巨大的)xml文件中提取數據使用php

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
Monsieur</DATA> 
</COL> 
<COL> 

等等,等等...... 我已經設計我需要在Xacobeo運行的要求,但我似乎無法得到它與PHP一起工作。我試過變化的羣衆,最後一個是以下幾點:

$xmldoc = new DOMDocument(); 
$xmldoc->load('hellashort.xml'); 
$xpathvar = new Domxpath($xmldoc); 
$queryResult = $xpathvar->query('//COL'); 
foreach($queryResult as $result){ 
    echo $result->textContent; 
} 

我想這個代碼更美觀的文件和它的作品,所以我怎麼能得到它與此文件的工作? 所有建議表示讚賞。 感謝

UPDATE 我檢查了短文件的錯誤,並意識到我沒有關閉的元素,讓一個作品,但是長文件包含根據網上檢查沒有錯誤,但仍然無法正常工作。

更新2 長文件現在工作的要求/,但只要沒有返回,因爲他們變得更加複雜,即://ROW/COL[position()=39]/DATA這Xacobeo返回正確的結果。 .xml文件可能太大而無法通過這種方式處理? (此文件是大約11.2莫)

更新3 - 固定 所以我改變了我的接洽,並最終做這種方式:

$file=file_get_contents("go.xml"); 
$xml=simplexml_load_string($file); 
$elements=$xml->path('//ROW/COL[position()=1]/DATA'); 

我明白爲什麼它被稱爲SimpleXML的,感謝所有的雖然幫助

+1

我會建議使用任何在線工具驗證XML,並分享您正在收到什麼錯誤,或發生了什麼。 – Netham

+0

沒有任何錯誤出現(無論是在屏幕上還是在日誌中),並且沒有出現任何結果......我在函數前後迴應了幾個隨機短語,以確保我沒有得到死亡的白色屏幕,並且他們都顯示很好。 –

回答

0

首先確保您的服務器設置爲顯示所有可用的錯誤。 作爲變體,將這個片段放在腳本的開頭。

ini_set('display_startup_errors',1); 
ini_set('display_errors',1); 
error_reporting(E_ALL | E_STRICT); 

然後你可以分享錯誤信息嗎?

+0

在瀏覽器或者apache錯誤日誌中都沒有錯誤...數組的'print_r'給了我'DOMNodeList Object()' –

0

確保您的文檔只有一個根元素,即一個元素包含所有<ROW>元素:

<DOCUMENT> 
<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
<!-- ... --> 
</DOCUMENT> 

如果您有多個行沒有根,這不是一個很好formet XML文件,並將其將失敗:

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<!-- ... --> 
</ROW> 
<ROW MODID="183" RECORDID="562"> 
<!-- ... --> 
</ROW> 
+0

我已經檢查過,整個文件包含在一個''元素中..我相當肯定,它正在被正確讀取,因爲查詢只是在'/'中 –