关于php:从SimpleXML访问@attribute

Accessing @attribute from SimpleXML

访问我的SimpleXML对象的@attribute部分时遇到问题。 当我var_dump整个对象时,我得到正确的输出,而当我var_dump其余对象(嵌套标签)时,我得到正确的输出,但是当我遵循docs和var_dump ,尽管第一个var_dump清楚地表明存在要输出的属性,但我还是得到了一个空对象。

任何人都知道我在这里做错了/如何进行这项工作?


尝试这个

1
$xml->attributes()->Token


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

php.net上的更多信息
http://php.net/simplexmlelement.attributes

该页面的示例代码:

1
2
3
4
5
$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,""
";
}


我之前用过很多次来获得@attributes,如下所示,它花了更长的时间。

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

它应该更简单,并且可以一次获得以下格式的属性:

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

1
$xml['field'];

其他替代方法是:

正确和快速格式

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

格式错误

1
2
3
4
5
$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];


1
2
3
4
5
6
7
8
9
$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"]


您可以这样做:

1
echo $xml['token'];

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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所困扰),而我发现的是

1
 $xml->tagName['attribute']

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

这是最简单的格式,这一事实是有加分的,但是我并不觉得我疯狂地尝试了其他人说过的所有格式。

Njoy具有什么价值(我提到过独特的构建吗?)。