2017-08-11 54 views
0

我可以解析標準的XML文件,但我不能這個XML文件。PHP - 如何解析XML

我該如何解析這個XML。 我想列出'number_name'。

謝謝。

<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
<numbers> 
    <number no_id="4" number_name="car" /> 
    <number no_id="6" number_name="bike" /> 
    <number no_id="11" number_name="train" /> 
    <number no_id="32" number_name="plane" /> 
</numbers> 

+0

檢查此鏈接,這將幫助你 HTTPS ://www.w3schools.com/php/php_xml_simplexml_read.asp –

+0

看看這個:https://stackoverflow.com/questions/250679/best-way-to-parse-rss-atom-feeds-with-php – yoeunes

+0

你可能還想看到這個鏈接,[SimpleXMLElement :: attributes](http://php.net/manual/en/simplexmlelem ent.attributes.php) – 2017-08-11 01:17:53

回答

0

PHP的DOM classes是非常強大的,你應該探索它們。例如,這裏是一個使用DOMXPath的解決方案。

https://3v4l.org/oCifF

<?php 

$xml = <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
    <numbers> 
     <number no_id="4" number_name="car" /> 
     <number no_id="6" number_name="bike" /> 
     <number no_id="11" number_name="train" /> 
     <number no_id="32" number_name="plane" /> 
    </numbers> 
</rss> 
XML; 

$doc = new DOMDocument(); 
$doc->loadXML($xml); 

$xpath = new DOMXpath($doc); 

foreach ($xpath->query('/rss/numbers/number') as $element) { 
    echo $element->getAttribute('number_name').PHP_EOL; 
} 
car 
bike 
train 
plane 
0

的替代DOMXPath被使用SimpleXML。它不像DOM版本那麼強大,但是正如名字所暗示的那樣,訪問數據非常簡單和容易(雖然在創建數據方面不太靈活)。

使用您的樣品,這樣做的兩種方式是...

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$xml = <<<XML 
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
    <numbers> 
     <number no_id="4" number_name="car" /> 
     <number no_id="6" number_name="bike" /> 
     <number no_id="11" number_name="train" /> 
     <number no_id="32" number_name="plane" /> 
    </numbers> 
</rss> 
XML; 

$response = new SimpleXMLElement($xml); 

echo "Element access:".PHP_EOL; 
foreach ($response->numbers->number as $number) { 
    echo $number['number_name'].PHP_EOL; 
} 
echo "XPath:".PHP_EOL; 
$xp = $response->xpath('//number'); 
foreach ($xp as $number) { 
    echo $number['number_name'].PHP_EOL; 
} 

,讓你的輸出...

Element access: 
car 
bike 
train 
plane 
XPath: 
car 
bike 
train 
plane