我在访问@attribute
SimpleXML对象的部分时遇到问题。当我var_dump
整个对象时,我得到正确的输出,当我var_dump
其余对象(嵌套标签)时,我得到正确的输出,但是当我遵循docs和时var_dump
$xml->OFFICE->{'@attributes'}
,我得到一个空对象,尽管事实是第一个var_dump
清楚地表明,存在要输出的属性。
任何人都知道我在这里做错了/如何进行这项工作?
我在访问@attribute
SimpleXML对象的部分时遇到问题。当我var_dump
整个对象时,我得到正确的输出,当我var_dump
其余对象(嵌套标签)时,我得到正确的输出,但是当我遵循docs和时var_dump
$xml->OFFICE->{'@attributes'}
,我得到一个空对象,尽管事实是第一个var_dump
清楚地表明,存在要输出的属性。
任何人都知道我在这里做错了/如何进行这项工作?
Answers:
您可以通过在XML节点上调用attribute()函数来获取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";
}
$b
它将成为一个SimpleXMLElement
对象,print_r
并且var_dump
会给您带来奇怪的事物。您可以将其转换为字符串(或任意类型)以解决此问题。
试试这个
$xml->attributes()->Token
attributes()
与XML中正确标签相对应的对象。就像您拥有的<root><tag attr="a">b</tag></root>
话,那么您需要$xml->tag->attributes()->attr
进行访问。
我之前曾多次使用@attributes
它来获得下面的效果,但时间更长。
$att = $xml->attributes();
echo $att['field'];
它应该更简单,并且您可以一次获得以下格式的属性:
$xml['field'];
其他替代方法是:
$xml->attributes()->{'field'};
$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];
$xml->attributes()->{'field'}
,$xml->attributes()->field
,和$f='field'; $xml->attributes()->$f;
是相同的。看不出为什么一个是正确的格式而另一个是错误的原因。
$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"]
。
get_properties
处理程序)。很有意思。
您可以这样做:
echo $xml['token'];
它帮助我将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
)
不幸的是,我有一个独特的PHP 5.5版本(暂时被Gentoo所困扰),而我发现的是
$xml->tagName['attribute']
是唯一有效的解决方案。我尝试了上述Bora的所有方法,包括“ Right&Quick”格式,但都失败了。
这是最简单的格式,这一事实是有加分的,但是我并不觉得我疯狂地尝试了别人说过的所有格式。
Njoy具有什么价值(我提到过独特的构建吗?)。