xml_parse_into_struct
xml_parse_into_struct
(PHP 3>= 3.0.8, PHP 4)
xml_parse_into_struct - разбирает XML-данные в структуру массива.
Описание
int xml_parse_into_struct (resource parser, string data, array &values, array &index)
Эта функция разбирает XML-файл на две параллельные структуры: одна из которых (index) содержит указатели на местонахождение соответствующих значений в массиве values array. Последние два параметра обязаны передаваться по ссылке.
Пример иллюстрирует внутреннюю структуру сгенерированных массивов. Мы используем простой тэг note, встроенный в тэг para, а затем разбираем это и выводим сгенерированные структуры:
$simple = "<para><note>simple note</note></para>"; $p = xml_parser_create(); xml_parse_into_struct($p,$simple,$vals,$index); xml_parser_free($p); echo "Index array\n"; print_r($index); echo "\nVals array\n"; print_r($vals); |
Index array Array ( [PARA] => Array ( [0] => 0 [1] => 2 ) [NOTE] => Array ( [0] => 1 ) ) Vals array Array ( [0] => Array ( [tag] => PARA [type] => open [level] => 1 ) [1] => Array ( [tag] => NOTE [type] => complete [level] => 2 [value] => simple note ) [2] => Array ( [tag] => PARA [type] => close [level] => 1 ) ) |
Разбор на основе событий (на основе библиотеки expat) может усложниться, если у вас сложный XML-документ. Эта функция не производит объект в стиле DOM, а генерирует структуры, отвечающие за то, чтобы быть пересечёнными в манере дерева. Таким образом, мы может легко создавать объекты, представляющие данные в XML-файле. Рассмотрим следующий XML-файл, представляющий собой небольшую БД с информацией об аминокислотах:
и небольшой код для разбора документа и генерации соответствующих объектов:
Пример 2. parsemoldb.php - разбирает moldb.xml на массив молекулярных объектов
|
После выполнения parsemoldb.php переменная $db содержит массив AminoAcid-объектов, и вывод скрипта подтверждает это:
** Database of AminoAcid objects: Array ( [0] => aminoacid Object ( [name] => Alanine [symbol] => ala [code] => A [type] => hydrophobic ) [1] => aminoacid Object ( [name] => Lysine [symbol] => lys [code] => K [type] => charged ) ) |