Нужна помощь в разборе Flat XML с помощью PHP - PullRequest
0 голосов
/ 08 марта 2012

У меня реальная проблема при попытке разобрать файл 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 ]

1 голос
/ 08 марта 2012

Как насчет чего-то вроде:

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

Он пытается собрать ключи и значения и присвоить их массиву по ходу дела.

1 голос
/ 08 марта 2012

Взгляните на класс simplexml: http://php.net/simplexml

Кроме того, у XML есть стандарт, поэтому, хотя ваш XML поступает из внешнего интерфейса, он должен быть стандартным, действительным XML.

EDIT

<?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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...