使用php读取XML

时间:2016-02-18 05:14:07

标签: php xml xmlreader

如何使用php阅读下面的xml?

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<style type="text/css">
	body{
		margin:0;
		padding: 0;

	}

	div.container{
		width:98%;
		margin: 1%;
		border:1px solid black;
		height: 650px;
	}
</style>

<body>
 <div class="container">
 	
 </div>

</body>
</html>

我尝试了以下代码,但似乎无法正常工作:

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

<video>

<youtube> youtube video url </youtube>

</video>

3 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分:0)

不需要任何花哨的东西,只需在加载后使用->getElementsByTagName()方法:

$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 :(得分: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])');