从SimpleXML访问@attribute

时间:2009-10-30 20:31:23

标签: php xml simplexml

我在访问SimpleXML对象的@attribute部分时遇到问题。当我var_dump整个对象时,我得到正确的输出,当我var_dump对象的其余部分(嵌套标签)时,我得到正确的输出,但是当我按照文档和{ {1}} var_dump,我得到一个空对象,尽管第一个$xml->OFFICE->{'@attributes'}清楚地表明存在要输出的属性。

任何人都知道我在这里做错了什么/我如何才能做到这一点?

8 个答案:

答案 0 :(得分:118)

试试这个

$xml->attributes()->Token

答案 1 :(得分:80)

您可以通过调用XML节点上的attributes()函数来获取XML元素的属性。然后你可以var_dump函数的返回值。

更多信息,请访问php.net http://php.net/simplexmlelement.attributes

该页面的示例代码:

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

答案 2 :(得分:44)

我曾多次使用@attributes获得如下所示,而且时间稍长。

$att = $xml->attributes();
echo $att['field'];

它应该更容易,您只能一次获得格式化的属性:

标准方式 - 阵列访问属性(AAA)

$xml['field'];

其他替代方案是:

对&快速格式

$xml->attributes()->{'field'};

错误的格式

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];

答案 3 :(得分:37)

$xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;

$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]

使用SimpleXMLElement::attributes

事实是,SimpleXMLElement get_properties处理程序非常重要。没有名为“@attributes”的属性,因此您无法执行$sxml->elem->{"@attributes"}["attrib"]

答案 4 :(得分:14)

你可以这样做:

echo $xml['token'];

答案 5 :(得分:7)

如果您正在寻找这些属性的列表,XPath将成为您的朋友

print_r($xml->xpath('@token'));

答案 6 :(得分:2)

不幸的是我有一个PHP 5.5的独特版本(暂时停留在Gentoo上),我发现的是那个

 $xml->tagName['attribute']

是唯一有效的解决方案。我尝试了上面所有的Bora方法,包括&#39; Right&amp; amp;快速&#39;格式,它们都失败了。

事实上,这是最简单的格式是一个优点,但并不认为我疯狂尝试其他人所说的所有格式。

Njoy的价值(我提到了独特的构建吗?)。

答案 7 :(得分:1)

它帮助我将simplexml_load_file($ file)的结果转换为JSON结构并将其解码回来:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);

$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);

>> result: SimpleXMLElement Object
(
)

$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);

>> result: stdClass Object
(
    [key] => value
)