我在尝试解析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
等
答案 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);
它会尝试收集键和值,然后将它们分配给数组。