2016-02-18 59 views
0

如何使用php讀取下面的xml?使用php讀取XML

<?xml version="1.0" encoding="UTF-8"?> 

<video> 

<youtube> youtube video url </youtube> 

</video> 

我嘗試下面的代碼,但似乎不工作:

$dom = new DOMDocument(); 

$dom->load('new_result.xml'); 

$results = $dom->documentElement; 

foreach($results as $result) 

{ 

foreach($result->getElementsByTagName('youtube') as $youtube) 

{ 

echo ' video url ' . $youtube->nodeValue; 

} 

} 

回答

0

無需任何幻想,只是用->getElementsByTagName()方法已加載後up:

$dom->load('new_result.xml'); // load the file 
// use ->getElementsByTagName() right away 
$youtube = $dom->getElementsByTagName('youtube'); 
if($youtube->length > 0) { // if there are youtube nodes indeed 
    foreach($youtube as $y) { // for each youtube node 
     echo $y->nodeValue; 
    } 
} 
2

試試這個:

if (file_exists('result.xml')) { 
    $xml = simplexml_load_file('result.xml'); 

    echo $xml->youtube; 
} else { 
    exit('Failed to open result.xml.'); 
} 
+0

非常感謝你,它的工作! –

+0

假設整個XML中只有一個'youtube'元素,當然。 –

+0

是的。只有一個元素 –

0

DOMDocument::documentElement是根元素節點。在你的XML中,這將是video元素節點。它不是一個節點列表,但實際的節點,所以foreach將無法​​正常工作。

只需卸下外foreach

$dom = new DOMDocument(); 
$dom->load('new_result.xml'); 
$video = $dom->documentElement; 

foreach($video->getElementsByTagName('youtube') as $youtube) { 
    echo ' video url ' . $youtube->nodeValue; 
} 

如果XML變得更加複雜,你可以使用XPath表達式:

$dom = new DOMDocument(); 
$dom->load('new_result.xml'); 
$xpath = new DOMXpath($dom); 

foreach($xpath->evaluate('/video/youtube') as $youtube) { 
    echo ' video url ' . $youtube->nodeValue; 
} 

大多數XPath表達式將返回節點列表,但他們可以返回標量值。有了這個,你可以消除第二個循環:

$dom = new DOMDocument(); 
$dom->load('new_result.xml'); 
$xpath = new DOMXpath($dom); 

echo ' video url ' . $xpath->evaluate('string(/video/youtube[1])');