2013-07-01 76 views
0

這是我的XML文件我想處理XML文件中的PHP

<?xml version="1.0" encoding="UTF-8"?> 
<searchresult> 
    <query>file</query> 
    <page-number>3</page-number> 
    <start>20</start> 
    <files-per-page>10</files-per-page> 
    <files-approx-count>6361998</files-approx-count> 
    <result-files> 
    <file> 
     <name>file 1</name> 
     <description> 
     descrp 
     </description> 
     <url> 
     http://www.example.com 
     </url> 
    </file> 
    <file> 
     <name>file 2</name> 
     <description> 
     descrp 2 
     </description> 
     <url> 
     http://www.example.com 
     </url> 
    </file> 
    </result-files> 
</search-result> 

我嘗試下面的代碼

$xml = simplexml_load_file("file.xml"); 
foreach ($xml as $xmls): 
    $name =$xmls->name; 
    $url =$xmls->url; 
    echo $name.$url; 
endforeach; 

但沒有輸出,請幫助。

+0

沒有輸出通常意味着錯誤。請發佈錯誤。 –

+0

顯示一個空白頁面,但我可以使用代碼echo $ xml-> query獲取ELEMENT查詢; –

回答

3

第一件事,不能很好地形成的XML文件。根標籤爲<searchresult>,而最後一個標籤爲</search-result>。這會導致解析錯誤。第二件事,如果您的標籤包含短劃線,那麼這些標籤不能直接作爲變量使用,在這種情況下,您應該使用特殊的語法(請參閱:php simplexml_load_file with a dash (-))。解決這個問題的其他方法是,如果您控制de XML語法,請更改XML的編寫方式,並且不要在標記上使用破折號。

最後,我想你想打印result-files標籤內的文件信息。

$xml = simplexml_load_file("file.xml"); 

foreach ($xml->{'result-files'}->file as $file) { 
    printFile($file); 
} 

function printFile($file) { 
    $name = trim($file->name); 
    $url = trim($file->url); 
    print "$name $url\n"; 
} 

輸出:

file 1 http://www.example.com 
file 2 http://www.example.com 

和你做。

+0

+1不錯的答案,但不確定printFile函數的好處是什麼。此外,我會明確地將其轉換爲字符串'$ name =(string)$ file-> name;',因爲如果除了回顯它以外,它將保持爲SimpleXML元素對象。 – MrCode

+0

沒有直接的好處:)我只是想讓它更具可讀性,就像遍歷每個文件並對它做一些事情一樣。該怎麼辦?打印其名稱和網址。 –

+0

謝謝..它的工作,但我無法編輯XML文件,因爲它從第三方的另一個API的輸出。 –

0

當您使用simplexml_load_file時,您正在創建一個對象。該對象不一定是可迭代的 - 但它可以通過標記名稱進行索引。儘量不要使用foreach(...),而應該使用echo $xml->name;。如果這不起作用,那麼也許你正在爲你的文件尋找錯誤的目錄。你可能需要做一些事情,如:

編輯以配對XML文件中提供

$path = $_SERVER['DOCUMENT_ROOT']."/file.xml"; 
$xml = simplexml_load_file($path); 
echo $xml->start; //should output 20 
+0

請運行上面的代碼與我的XML文件(結果是沒有錯誤沒有O/P) –

+0

請再試一次,並學習如何適應代碼.. – RutledgePaulV

+0

我覺得你只是在玩別人的代碼,不明白..而是 - 學習和建立你自己的代碼。切勿抓取和使用對您無意義的代碼 - 或者如果您想使用它,請首先了解它的工作原理。 – RutledgePaulV