需要帮助解析使用PHP的Flat XML

时间:2012-03-08 03:17:59

标签: php xml arrays string parsing

我在尝试解析XML文件时遇到了一个真正的问题,该文件的构造方式如下使用PHP
您可能会注意到,它们是键 - >值对,但它可以是键 - >字符串键 - >数据等。

有人有个主意吗?我非常感谢你的帮助。

另外,数据来自外部界面,我无法控制它的格式。

<array>
    <dict>
        <key>name</key>
        <string>John</string>
        <key>surname</key>
        <string>Smith</string>
        <key>Car</key>
        <string>Ford</string>
        <key>picture</key>
        <data>AAAA====</data>
        <key>age</key>
        <string>32</string>
    </dict>
</array>

我想以某种方式重新格式化数据,例如:

array
  -dict
    -name=John
    -surname=smith

2 个答案:

答案 0 :(得分:1)

看一下simplexml类:http://php.net/simplexml

此外,XML有一个标准,因此即使您的XML来自外部接口,它们也应该是标准的有效XML。

修改

<?php
$xmlstr = <<<XML
<array>
    <dict>
        <key>name</key>
        <string>John</string>
        <key>surname</key>
        <string>Smith</string>
        <key>Car</key>
        <string>Ford</string>
        <key>picture</key>
        <data>AAAA====</data>
        <key>age</key>
        <string>32</string>
    </dict>
</array>
XML
;

$tmp = simplexml_load_string($xmlstr);
$var = (array)$tmp->dict;
$keys = array();
foreach($tmp->dict->children() as $k => $v) {
        if($k == 'key') $key = (string)$v;
        else $keys[$key] = (string)$v;
}

print_r($keys);

答案 1 :(得分:1)

如下:

$temp = new SimpleXMLElement($xml);
$array = array();
foreach($temp->dict->children() as $value) {
    if($value->getName() == 'key') {
        $key = (string)$value;
    } elseif($value->getName() == 'string') {
        $array[$key] = (string)$value;
    } elseif($value->getName() == 'data') {
        // possibly treat data differently, or maybe not
        $array[$key] = (string)$value;
    }
}

print_r($array);

它会尝试收集键和值,然后将它们分配给数组。