2012-03-08 69 views
0

我有一個真正的問題,試圖通過解析XML文件,其結構如下:使用PHP
正如你可能會注意到,他們是鍵 - >值對,但它可能是鍵 - >串鍵 - >數據需要幫助使用PHP解析Flat 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> 

,我想簡單的東西,如莫名其妙地重新格式化數據:

array 
    -dict 
    -name=John 
    -surname=smith 

回答

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); 
+0

我一直在使用SimpleXML,但它似乎將我的XML轉換爲三個數組(鍵,字符串,數據),當然,我不能只映射數組,因爲索引會變得混亂 – 2012-03-08 03:22:50

+0

它會如果你在PHP中發佈你的嘗試以及你試圖實現的目標,那麼我可以更容易地幫助你:) – 2012-03-08 03:24:59

+0

$ tmp = simplexml_load_string($ xmlstr); $ var =(array)$ tmp-> dict; var_dump($ var); - 這是迄今爲止。我無法將數據轉化爲正確的結構。 – 2012-03-08 03:27:22

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); 

它試圖收拾鍵和值,並將它們分配給數組,因爲它去。

+0

這幾乎是完美的,除了它不支持除[字符串]之外的任何其他內容,例如[data](在這個例子中) – 2012-03-08 03:35:17

+0

增加數據支持 – Martin 2012-03-08 03:42:57

+0

非常感謝你馬丁 - 我真的很感激它:-) – 2012-03-08 05:37:36