Php - 如何解析xml

时间:2017-08-11 00:17:55

标签: php xml

我可以解析标准的xml文件,但我不能使用这个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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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