SimpleXML - 无法获取第一个标记的属性

时间:2011-03-30 08:31:52

标签: php simplexml

我正在尝试读取XML的第一个标记的属性。 这是XML结构

<myxml timestamp="1301467801">
    <tag1>value1</tag1>
    <tag2>value2</tag2>
    …
</myxml>

以下是我尝试获取时间戳属性的方法(尝试了2种方法,将它们列在这里,无效)

$timestamp = $xml->myxml->attributes()->timestamp; //gives Node no longer exists warning
if($xml->myxml && $xml->myxml->attributes()){ //Doesn't enter this loop
    $arr = $xml->myxml->attributes();
    $timestamp = $arr['timestamp'];
}

有人可以告诉我如何获得属性的价值吗?感谢。

3 个答案:

答案 0 :(得分:10)

这是因为您的$xml实际上指向了根元素。正确的用法是:

$timestamp = $xml->attributes()->timestamp;

答案 1 :(得分:3)

访问属性的正确方法[只要它们属于节点的命名空间]就是使用数组表示法。为命名空间属性保留attributes

此外,您应该在其根节点之后命名表示XML文档的变量。这是一个很好的做法,可以防止很多混乱。

$myxml = simplexml_load_string(
    '<myxml timestamp="1301467801">
        <tag1>value1</tag1>
        <tag2>value2</tag2>
    </myxml>'
);

echo $myxml['timestamp'];

答案 2 :(得分:1)

<?php
$myxml = simplexml_load_string(
        '<myxml timestamp="1301467801">
        <tag1>value1</tag1>
        <tag2>value2</tag2>
    </myxml>'
);

$test = $myxml['timestamp'];
// will asign simpleXMLElement
echo $test; // -> will print nothing

// you need to cast the simpleXMLElement attribute as STRING!!! 
$test = (string)$myxml['timestamp'];
echo $test;
?>