从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 )