П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 5929 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 8078 раз(а).

Учебник HTML.
Просмотров 4785 раз(а).

Руководство по PHP5.
Просмотров 1787 раз(а).

Хостинг через призму DNS.
Просмотров 6774 раз(а).

Подборка текстов стандартных документов.
Просмотров 57439 раз(а).

Учебник PHP - Самоучитель
Просмотров 5058 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 11161 раз(а).

Внешние атаки...
Просмотров 6876 раз(а).

Учебник PHP.
Просмотров 4076 раз(а).

SSI в примерах.
Просмотров 1110 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Учебник РНР
Назад Вперёд

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


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: