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])');