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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





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

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


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