Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML парсер в классе, Как указать ссылки на методы 
:(
    Опции темы
rcdimon
Дата 29.8.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



есть код, который работает

Код

class XMLparser {
    var $Prs;
    
    var $XMLstructure;
    
    //function XMLparser($Options){ // Конструктор
    //    $Options = '';
    //}
    
    function Parse ($Data){
        $this->Prs = xml_parser_create();
                
        xml_set_element_handler($this->Prs, 'startElement', 'endElement');
        //xml_set_character_data_handler($this->Prs, “characterData”);
        
        $xmlresult = xml_parse($this->Prs, $Data);
        $xmlerror = xml_error_string(xml_get_error_code($this->Prs));
        $xmlcrtline = xml_get_current_line_number($this->Prs);   
        
        
    }
    
    
}
        


    function startElement($parser, $name, $attrs) {
        print $name  . "\n";
    }
        function endElement($parser, $name) {
            print $name;
        }

$a = new XMLparser();

$data = '<a url="sdf"><b><c/>jkljkljklkjl</b></a>';

$a->Parse($data);


Но в нем обработчики указаны как внешние функции 
xml_set_element_handler($this->Prs, 'startElement', 'endElement');

А как методы этого же класса определить в качестве обработчиков?

Код типа такого не работает


Код

class XMLparser {
    var $Prs;
    
    var $XMLstructure;
    
    //function XMLparser($Options){ // Конструктор
    //    $Options = '';
    //}
    
    function Parse ($Data){
        $this->Prs = xml_parser_create();
                
          xml_set_element_handler($this->Prs, $this->startElement, $this->endElement);
        //xml_set_character_data_handler($this->Prs, “characterData”);
        
        $xmlresult = xml_parse($this->Prs, $Data);
        $xmlerror = xml_error_string(xml_get_error_code($this->Prs));
        $xmlcrtline = xml_get_current_line_number($this->Prs);   
        
        
    }

    function startElement($parser, $name, $attrs) {
        print $name  . "\n";
    }
        function endElement($parser, $name) {
            print $name;
        }    
    
}
        



$a = new XMLparser();

$data = '<a url="sdf"><b><c/>jkljkljklkjl</b></a>';

$a->Parse($data);



Это сообщение отредактировал(а) rcdimon - 29.8.2007, 21:38
PM MAIL ICQ   Вверх
console
Дата 29.8.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Не ручаюсь, но может XMLparser::startElement  заработает?

Добавлено через 51 секунду
Да еще методы статическими сделать..


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
Golda
Дата 29.8.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



В PHP5 есть 2 способа:
  • использовать массив с двумя элементами: ссылка на объект класса, имя метода
    xml_set_element_handler($this->Prs, array(&$this,"startElement"), array(&$this,"endElement"));
    Собственно, большинство PHP функций, работающих с callback-ами позволяют такое обращение с методами
  • Второй способ специфичен именно для SAX. Используйте xml_set_object(). После этого парсер подразумевает, что имена всех функций, определенных как callback-и.
    Код

    xml_set_object($this->Prsr,&$this);
    xml_set_element_handler($this->Prs, "startElement",  "endElement");

В PHP4 из-за какого-то бага работает только второй способ.

Но учтите, что xml_set_object() нельзя применять в конструкторе. В общем, читайте комментарии пользователей в справочнике. Там много полезного

http://www.php.net/manual/en/function.xml-...ent-handler.php



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.