XML 使用 php 阅读
XML read using php
如何使用 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;
}
}
试试这个:
if (file_exists('result.xml')) {
$xml = simplexml_load_file('result.xml');
echo $xml->youtube;
} else {
exit('Failed to open result.xml.');
}
不需要花哨的东西,加载后使用->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;
}
}
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 表达式将 return 节点列表,但它们可以 return 标量值。这样你也可以消除第二个循环:
$dom = new DOMDocument();
$dom->load('new_result.xml');
$xpath = new DOMXpath($dom);
echo ' video url ' . $xpath->evaluate('string(/video/youtube[1])');
如何使用 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;
}
}
试试这个:
if (file_exists('result.xml')) {
$xml = simplexml_load_file('result.xml');
echo $xml->youtube;
} else {
exit('Failed to open result.xml.');
}
不需要花哨的东西,加载后使用->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;
}
}
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 表达式将 return 节点列表,但它们可以 return 标量值。这样你也可以消除第二个循环:
$dom = new DOMDocument();
$dom->load('new_result.xml');
$xpath = new DOMXpath($dom);
echo ' video url ' . $xpath->evaluate('string(/video/youtube[1])');