从SimpleXML访问@attribute

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

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

您可以通过调用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"; } 

尝试这个

 $xml->attributes()->Token 
 $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

get_properties ,SimpleXMLElement的get_properties处理程序是最重要的。 没有名为“@attributes”的属性,所以你不能做$sxml->elem->{"@attributes"}["attrib"]

我之前用了很多次,就像下面的那样获得了@attributes ,而且时间稍长一些。

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

它应该更容易,你可以一次只获得以下格式的属性:

标准方式 – arrays访问属性(AAA)

 $xml['field']; 

其他select是:

正确和快速的格式

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

错误的格式

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

你可以做:

 echo $xml['token']; 

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

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

不幸的是,我有一个PHP 5.5的独特构build(暂时停留在Gentoo中),而我发现的是

  $xml->tagName['attribute'] 

是唯一的解决scheme。 我尝试了上述所有Bora的方法,包括“Right&Quick”格式,但都失败了。

事实上,这是最简单的格式是一个加号,但不喜欢以为我尝试了所有其他人所说的格式都疯了。

Njoy的价值是什么(我提到了独特的构build?)。

它帮助我将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 )