Конвертировать элементы XML в массив - PullRequest
3 голосов
/ 13 августа 2010

У меня есть несколько простых XML-файлов, которые я хотел бы проанализировать в массиве PHP, чтобы можно было создавать динамические вставки SQL.

Пример XML:

<Data>
    <Key>1</Key>
    <Column>Value 1</Column>
    <Column2>Value 2</Column>
</Data>

Данные будут передаваться в PHP через http POST.

Какой самый простой способ сделать это? Всегда должен быть один экземпляр, но хотелось бы, чтобы опция брала несколько экземпляров из одного POST.

Конечно, я могу создать некоторый код для разбора конкретного PHP, но я бы хотел использовать один фрагмент кода для динамической обработки данных, чтобы его можно было использовать для создания вставок для нескольких таблиц.

Ответы [ 2 ]

4 голосов
/ 13 августа 2010

Ну, при условии, что вы хотите получить результат

array(
    1 => array(
        'Value 1',
        'Value 2',
    )
)

И при условии, что структура

<root>
    <Data>
        <!-- key and column entities -->
    </Data>
    <Data>
        <!-- key and column entities -->
    </Data>
    <Data>
        <!-- key and column entities -->
    </Data>
</root>

Вы можете сделать что-то вроде (я предпочитаю DomDocument ):

$dom = new DomDocument();
$dom->loadXml($xmlString);
$dataElements = $dom->getElementsByTagName('Data');
$array = array();
foreach ($dataElements as $element) {
    $subarray = array();
    foreach ($element->childNodes as $node) {
        if (!$node instanceof DomElement) {
            continue;
        }
        $key = $node->tagName;
        $value = $node->textContent;
        $subarray[$key] = $value;
    }
    $array[] = $subarray;
}

С этим редактированием оно превратится:

<root>
    <Data>
        <Key>4</Key>
        <Foo>Bar</Foo>
    </Data>
    <Data>
        <Key>6</Key>
        <Bar>Baz</Bar>
    </Data>
</root>

В:

array(
    array(
        'Key' => 4,
        'Foo' => 'Bar',
    ),
    array(
        'Key' => 6,
        'Bar' => 'Baz',
    ),
)
1 голос
/ 13 августа 2010

SimpleXML - это название библиотеки, которую вы ищете: http://php.net/manual/en/book.simplexml.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...