Дипломные работы, курсовые проекты на заказ, контрольные работы на заказ

 
Начертательная геометрия Практикум по решению задач Геометрическое черчение Инженерная графика ЕСКД Кратные интегралы Математический анализ Матрицы Пределы Производные Векторная алгебра Интегральное исчисление ТФКП Ядерная физика Электростатика Магнетизм Оптика Информационные технологии
Учебник РНР
Назад Вперёд

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-файл, представляющий собой небольшую БД с информацией об аминокислотах:
Пример 1. moldb.xml - небольшая БД с молекулярной информацией
<?xml 
version="1.0"?> <moldb> <molecule> <name>Alanine</name> 
<symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> 
</molecule> <molecule> <name>Lysine</name> <symbol>lys</symbol> 
<code>K</code> <type>charged</type> </molecule> 
</moldb>

и небольшой код для разбора документа и генерации соответствующих объектов:

Пример 2. parsemoldb.php - разбирает moldb.xml на массив молекулярных объектов
<?php 
class AminoAcid { var $name; // имя aa var $symbol; // трёхбуквенный символ var 
$code; // однобуквенный код var $type; // hydrophobic, charged или neutral function 
AminoAcid ($aa) { foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } } function 
readDatabase($filename) { // читать xml БД аминокислот $data = implode("",file($filename)); 
$parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); 
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($parser,$data,$values,$tags); 
xml_parser_free($parser); // цикл по этим структурам foreach ($tags as $key=>$val) 
{ if ($key == "molecule") { $molranges = $val; // каждая пара вхождений массива 
это нижняя и верхняя // границы диапазона для определения каждой молекулы for 
($i=0; $i < count($molranges); $i+=2) { $offset = $molranges[$i] + 1; $len 
= $molranges[$i + 1] - $offset; $tdb[] = parseMol(array_slice($values, $offset, 
$len)); } } else { continue; } } return $tdb; } function parseMol($mvalues) { 
for ($i=0; $i < count($mvalues); $i++) $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; 
return new AminoAcid($mol); } $db = readDatabase("moldb.xml"); echo "** Database 
of AminoAcid objects:\n"; print_r($db); ?>

После выполнения 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 ) )

НазадОглавление Вперёд
xml_get_error_codeВверхxml_parse