SimpleXML 属性到数组

2022-08-30 18:43:39

有没有更优雅的方法可以将 SimpleXML 属性转义到数组?

$result = $xml->xpath( $xpath );
$element = $result[ 0 ];
$attributes = (array) $element->attributes();
$attributes = $attributes[ '@attributes' ];

我真的不想为了提取键/值对而循环使用它。我所需要的只是把它放到一个数组中,然后把它传递下去。我本来以为会默认这样做,或者至少给出这个选项。但我甚至在任何地方都找不到上述解决方案,我必须自己弄清楚。我是否把这个或什么东西弄得太复杂了?attributes()

编辑:

我仍然在使用上面的脚本,直到我确定访问@attributes数组是否安全。


答案 1

更优雅的方式;它给你相同的结果,而不使用$attributes[ '@attributes' ]

$attributes = current($element->attributes());

答案 2

不要直接读取属性,这是供内部使用。无论如何,已经可以用作数组,而无需“转换”为真实数组。'@attributes'attributes()

例如:

<?php
$xml = '<xml><test><a a="b" r="x" q="v" /></test><b/></xml>';
$x = new SimpleXMLElement($xml);

$attr = $x->test[0]->a[0]->attributes();
echo $attr['a']; // "b"

如果你想让它成为一个“true”数组,你将不得不循环:

$attrArray = array();
$attr = $x->test[0]->a[0]->attributes();

foreach($attr as $key=>$val){
    $attrArray[(string)$key] = (string)$val;
}