Получить содержимое узла из XML-файла и преобразовать его в массив php? - PullRequest
1 голос
/ 18 апреля 2010

Я ищу решение для извлечения какого-либо узла из большого XML-файла (используя xmlstarlet http://xmlstar.sourceforge.net/) и последующего синтаксического анализа этого узла в php array .

elements.xml

<?xml version="1.0"?>
<elements>
  <element id="1" par1="val1_1" par2="val1_2" par3="val1_3">
    <title>element 1 title</title>
    <description>element 1 description</description>
  </element>
  <element id="2" par1="val2_1" par2="val2_2" par3="val2_3">
    <title>element 2 title</title>
    <description>element 2 description</description>
  </element>
</elements>

Чтобы извлечь тег элемента с id = "1" , используя xmlstarlet Я выполняю эту команду оболочки ...

xmlstarlet sel -t -c "/elements/element[id=1]" elements.xml

Эта команда оболочки выводит что-то вроде этого ...

<element id="1" par1="val1_1" par2="val1_2" par3="val1_3">
  <title>element 1 title</title>
  <description>element 1 description</description>
</element>

Как я могу разобрать этот вывод оболочки в php массив ?

Спасибо.


Я нашел http://php.net/manual/en/function.simplexml-load-string.php довольно полезным. Эта функция SimpleXML преобразует извлеченный фрагмент XML в объект SimpleXML.

1 Ответ

1 голос
/ 18 апреля 2010

вы всегда можете взять новый выведенный xml и использовать simplexml, например:

$data = '<element id="1" par1="val1_1" par2="val1_2" par3="val1_3">
<title>element 1 title</title>
<description>element 1 description</description>
</element>';


$xml = simplexml_load_string($data);
echo $xml->title; //access title
echo $element_ID = $xml->attributes()->id; //access elements attributes by name

и теперь $xml - это массив, который вам нужен

...