Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка XML парсера
 
 автор: Ady   (29.05.2007 в 17:51)   письмо автору
 
 

Если XML файл не содержит <?xml version="1.0" ?>, тогда все идеально
работает.
Если содержит тогда ошибка "XML error: syntax error at line 1"


<?php
$xml 
= array();
$counter 0;
$write "";
$main "";

function 
startElement ($parser,$name,$atrb)

       global 
$xml$write$main;
    
       switch(
$name
    {
           case 
"CHANNEL"$main "CHANNEL"; break;
           case 
"BOOK"$main "BOOK"; break;
           default: 
$write $name; break;
    }

}

function 
endElement($parser$name
{
       global 
$xml$write$counter;
       
$write "";
       if (
$name == "BOOK"
    {
           
$counter++;
       }
}

function 
characterData($parser$data) {
    global 
$xml$write$main$counter;
        switch(
$main
        {
            case 
"CHANNEL":
                if (isset(
$xml[$write])) {
                    
$xml[$write] .= $data;
                } else {
                    
$xml[$write] = $data;
                }
                break;

            case 
"BOOK":
                if (isset(
$xml[$main][$counter][$write])) {
                    
$xml[$main][$counter][$write] .= $data;
                } else {
                    
$xml[$main][$counter][$write] = $data;
                }
                break;
        }
}

$url "books.xml";
$fp fopen($url,'r');
$xml_parser xml_parser_create();

xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");

while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($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);

print_r ($xml);

?>


books.xml

<channel>

<book>
<author>Pushkin</author>
<title>ABC</title>
</book>

<book>
<author>Pushkin</author>
<title>DEF</title>
</book>

<book>
<author>Pushkin</author>
<title>GHI</title>
</book>

</channel>



<? xml version="1.0" ?>

<channel>

<book>
<author>Pushkin</author>
<title>ABC</title>
</book>

<book>
<author>Pushkin</author>
<title>DEF</title>
</book>

<book>
<author>Pushkin</author>
<title>GHI</title>
</book>

</channel>

   
 
 автор: Саня   (30.05.2007 в 01:04)   письмо автору
 
   для: Ady   (29.05.2007 в 17:51)
 

Лишний пробел между '<?' и 'xml'. Нужно так:
<?xml version="1.0" ?>

   
 
 автор: Trianon   (30.05.2007 в 01:27)   письмо автору
 
   для: Ady   (29.05.2007 в 17:51)
 

Нечасто увидишь честный XML-парсинг.
Респект автору.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования