如何从此列表中访问simplexml元素?

时间:2012-12-13 21:46:00

标签: php simplexml

所以我有这些simplexmlelement对象。我无法让它工作如何解析一个特定的元素。

SimpleXMLElement Object
(
[Generation] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [version] => 3.1.0-alpha3
                [timestamp] => 1355434832
            )

    )

[Options] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [tempFormat] => c
                [byteFormat] => auto_binary
                [refresh] => 60000
                [showPickListTemplate] => true
                [showPickListLang] => true
            )

    )

[UsedPlugins] => SimpleXMLElement Object
    (
    )

[Vitals] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [Hostname] => domain.tld
                [IPAddr] => 127.0.0.1
                [Kernel] => 2.6.32-11-pve (SMP) x86_64
                [Distro] => Ubuntu 12.04.1 LTS
                [Distroicon] => Ubuntu.png
                [Uptime] => 1993669.51
                [Users] => 1
                [LoadAvg] => 0.08 0.02 0.01
                [CPULoad] => 0
            )

    )

....etc...

    )

我做了类似这样的事情来访问主机名,例如:

echo $xml->Generation->Vitals[0]->Hostname;

但我认为我做错了什么。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

它只会是:

$xml->Vitals[0]->attributes()->Hostname

答案 1 :(得分:0)

我不完全确定您是否必须坚持使用SimpleXml object,但如果不这样做,请查看DOMDocumentDOMXPath组合。我很喜欢。要说清楚,很难进入,但只要你掌握了它,你就会喜欢它。

你可以这样做:

$doc = new DOMDocument();
$doc->load('http://www.example.com/file.xml');
$xpath = new DOMXPath($doc);
$result = $xpath->query('//Vitals');

// print them all
foreach ($result as $r){
    echo $r->getAttribute('Hostname'); //your desired value
}

// or just the first one
echo $result->item(0)->getAttribute('Hostname');

你也可以让查询略大一些,以便立即获取属性://Vitals@Hostname也可以正常工作。

通过这个开始你可能会掌握它。

进一步阅读: