Вы не зарегистрированы? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
Вы должны авторизироваться, чтобы добавить сообщение.
|
|
|
Последние активные темы форума |
|
xml_parse_into_struct
(PHP 3>= 3.0.8, PHP 4 , PHP 5) xml_parse_into_struct -- Парсер XML данных в структуру массива
Descriptionint xml_parse_into_struct ( resource parser, string data, array &values [, array &index] ) Эта функция разбирает XML-файл на две параллельные структуры: одна из которых (index) содержит указатели на местонахождение соответствующих значений в массиве values array. Последние два параметра обязаны передаваться по ссылке.
Пример иллюстрирует внутреннюю структуру сгенерированных массивов. Мы используем простой тэг note, встроенный в тэг para, а затем разбираем это и выводим сгенерированные структуры:
Пример 1. xml_parse_into_struct() example
<?php
$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. moldb.xml - small database of molecular information <?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> |
|
And some code to parse the document and generate the appropriate
objects:
Пример 3.
parsemoldb.php - parses moldb.xml into an array of
molecular objects
<?php
class
AminoAcid
{
var
$name
;
// aa name
var
$symbol
;
// three letter symbol
var
$code
;
// one letter code
var
$type
;
// hydrophobic, charged or neutral
function
AminoAcid
(
$aa
)
{
foreach (
$aa
as
$k
=>
$v
)
$this
->
$k
=
$aa
[
$k
];
}
}
function
readDatabase
(
$filename
)
{
// read the XML database of aminoacids
$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
);
// loop through the structures
foreach (
$tags
as
$key
=>
$val
) {
if (
$key
==
"molecule"
) {
$molranges
=
$val
;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
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-объектов, и вывод скрипта подтверждает это:
|
· Гостей: 2
· Пользователей: 0
· Всего пользователей: 453
· Новый пользователь: ZDA
|
|