如何访问simple-xml对象的键/属性

时间:2014-08-27 13:34:16

标签: php xml simplexml

我有一个xml-object,如下所示:

<search typ="car" sub="all" out="test" epc="2" tsc="1" rcc="111" tpc="111" cur="DOL" itc="10">

或使用var_dump():

object(SimpleXMLElement)[1012]
  public 'search' => 
    object(SimpleXMLElement)[1078]
          public '@attributes' => 
            array (size=9)
              'typ' => string 'car' (length=8)
              'sub' => string 'all' (length=3)
              'out' => string 'test' (length=11)
              'epc' => string '2' (length=1)
              'tsc' => string '1' (length=1)
              'rcc' => string '111' (length=3)
              'tpc' => string '111' (length=3)
              'cur' => string 'DOL' (length=3)
              'itc' => string '10' (length=2)

如何访问xml结的属性?

2 个答案:

答案 0 :(得分:1)

只需使用->attributes即可访问节点的属性。例如:

$xml = simplexml_load_string($xml_string); // or load_file

echo '<pre>';
print_r($xml->attributes());

独立:

// PHP 5.4 or greater (dereference)
echo $xml->attributes()['typ'];

答案 1 :(得分:1)

the basic usage examples in the manual所示,访问属性的标准方法是使用数组访问($element['attributeName']),例如

echo $search['typ'];
$typ = (string)$search['typ'];

请注意,该属性作为对象返回,因此您通常希望在将其存储到变量中时“强制转换”为字符串(或int等)。

要迭代所有属性,您可以使用the ->attributes() method,例如

foreach ( $search->attributes() as $name => $value ) {
     echo "$name: $value\n";
     $some_hash[ $name ] = (string)$value;
}

如果您有XML名称空间,例如,还需要attributes()方法。 `

$sx = simplexml_load_string(
    '<foo xlmns:bar="http://example.com#SOME_XMLNS" bar:becue="yum" />'
);
echo $sx->attributes('http://example.com#SOME_XMLNS')->becue;
// Or, shorter but will break if the XML is generated with different prefixes
echo $sx->attributes('bar', true)->becue;