如何使用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>
答案 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])');