Консультация № 55366
14.09.2006, 00:06
0.00 руб.
0 1 1
Уважаемые эксперты!

Подскажите, как средствами PHP разобрать XML-запрос, переданный методом POST? Если вопрос требует очень пространного ответа, то где об этом можно почитать?

Обсуждение

Неизвестный
15.09.2006, 11:25
общий
это ответ
Здравствуйте, chiefff!
Если правильно понял, XML-запрос это переменная, передаваемая скрипту через HTTP POST содержащая строку в формате XML, или uploaded XML файл, то в простых случаях можно обработать текст с помощью регулярных выражений(на этом не буду останавливаться, существует множество статей и книг по этой теме), или же воспользоваться встроенными в PHP XML Parser Functions.
в примере(взят из мануала по PHP) выводиться структура XML файла data.xml с отступами.
Основные функции:
xml_parser_create() - создает объект xml_parser;
xml_set_element_handler() - задает парсеру callback функции вызываемые при открытии и закрытии каждого элемента(функции startElement и endElement);
startElement,endElement - вызываются при открытии и закрытии элемента, для его обработки, в параметрах передаются: объект parser, имя текущего элемента, и ассоциативный массив его аттрибутов(ключ-имя аттрибута, значение - его значение);
xml_parse()- непосредственно парсит XML вызывая startElement и endElement для каждого элемента по порядку;
xml_parser_free() уничтожает xml_parser;

ну а все остальное - механизм чтения XML из файла, если у Вас строка можно все это опустить, а в xml_parse передать эту строку.
по литературе что-нибудь особое к сожалению подсказать не могу, разве что стандартный мануал по PHP(http://www.php.net/docs.php)
Если что, пишите.
Удачи.

Приложение:
<?php$file = "data.xml";$depth = array();function startElement($parser, $name, $attrs) { global $depth; for ($i = 0; $i < $depth[$parser]; $i++) { echo " "; } echo "$name\n"; $depth[$parser]++;}function endElement($parser, $name) { global $depth; $depth[$parser]--;}$xml_parser = xml_parser_create();xml_set_element_handler($xml_parser, "startElement", "endElement");if (!($fp = fopen($file, "r"))) { die("could not open XML input");}while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); }}xml_parser_free($xml_parser);?>
Форма ответа