Alexandre
PHPПенсионер
Как в SAX Обработать пустой тег
Классический пример:
есть XML текст
<item>
<name>HS-961</name>
<price>100</price>
<descr>Компьютер </descr>
</item>
....
При этом поле данных <descr> может быть пустым....
есть текст функций SAX анализатора
При парсинте и формировании массива - пустые теги не обрабатываются, т.е. я получаю массив:
Array(
[0] => Компьтер
[1] => монитор
[2] => плата)
вместо:
Array(
[0] => Компьтер
[1] => ''
[2] => монитор
[3] => ''
[4] => плата)
Кто сталкивался и как с этим бороться....
Классический пример:
есть XML текст
<item>
<name>HS-961</name>
<price>100</price>
<descr>Компьютер </descr>
</item>
....
При этом поле данных <descr> может быть пустым....
есть текст функций SAX анализатора
PHP:
function startElement($parser, $name, $attrs) { // функция обработки открывающего тега
global $nname, $opentag;
$opentag=true;
$nname=$name; }
function endElement($parser, $name) { // функция обработки закрывающего тега
global $opentag;
$opentag=false; }
function CharacterData($parser, $data ) { // функция обработки данных
global $nname, $Names, $HRef, $Price, $Desc, $Type, $opentag;
if ($nname == "NAME" and $opentag ) { $Names[] = $data;};
if ($nname == "DESCR" and $opentag) { $Desc[] = $data;};
if ($nname == "PRICE" and $opentag) { $Price[] = $data;};
}
$Datastr = /// ввод данных из файла .....
$xml_parser = xml_parser_create(); // создание обработчика событий
xml_set_element_handler($xml_parser, "startElement", "endElement"); // установка функций обработки
xml_set_character_data_handler($xml_parser, "CharacterData" ); // начального, конечного тега и данных
if (!xml_parse($xml_parser, $Datastr )) { // начало разбора и обработка ошибок
die(sprintf("ошибка : %s строка %d", xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));}
xml_parser_free($xml_parser); // освобождение обработчика событий
Array(
[0] => Компьтер
[1] => монитор
[2] => плата)
вместо:
Array(
[0] => Компьтер
[1] => ''
[2] => монитор
[3] => ''
[4] => плата)
Кто сталкивался и как с этим бороться....