如何解析XML(SimpleXML)

时间:2012-01-24 11:08:57

标签: php xml simplexml

我需要将XML字符串解析为数组。 我有XML

  <group xmlns="123" id="personal">
    <field id="last_name">last</field>
    <field id="first_name">first</field>
    <field id="birth_day">10/10/1990</field>
    <field id="gender"/>
  </group>

我在php中使用SimpleXML

$obj = simplexml_load_string($xml_string);
var_dump($obj);

SimpleXMLElement Object
(
[@attributes] => Array
    (
        [id] => personal
    )

[field] => Array
    (
        [0] => first
        [1] => last
        [2] => 10/10/1990
        [3] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [id] => gender
                    )

            )


    )

)

如何获得这样的阵列?有可能吗?

[field] => Array(
    [last_name] => last,
    [first_name] => first,
    [birth_day] => 10/10/1990,
    [gender] => NULL,
    ....

)

我不知道怎么解释这种情况。 我想索引id属性值。 请帮忙。

3 个答案:

答案 0 :(得分:3)

简单(注意它使用PHP 5.3功能):

libxml_use_internal_errors(true); // Turn off warnings because of invalid '123' namespace

$obj = simplexml_load_string($xml);
$obj->registerXPathNamespace('ns', '123');
$fields = $obj->xpath('//ns:field');

libxml_clear_errors(); // Clear warnings buffer

$result = array();
array_walk($fields, function($el) use (&$result) {
    $result[(string)$el['id']] = (string)$el ?: null;
});

echo '<pre>'; print_r($result); echo '</pre>';

输出(print_r未显示空值):

Array
(
    [last_name] => last
    [first_name] => first
    [birth_day] => 10/10/1990
    [gender] => 
)

答案 1 :(得分:0)

试试这个, 的print_r((阵列)($ OBJ));

检查simple_xml_load

上的示例

答案 2 :(得分:0)

您可以像这样查看XML:

foreach ($obj->field as $field) {
  ...
}

$field将是包含last_name,first_name,birthday和gender的数组。