На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> Разборщик XML в PHP , Что за хитрость такая
    Вот столкнулся с таким вопросом:

    В php (4.3.9) использую разборщик XML (xml_parser_create, xml_parse и т.д.). Пытаюсь разобрать следующее:
    Цитата
    <div>
    </div>
    Настроенные обработчики (начала элемента, конца элемента и данных) получают следующее (вывожу подряд):
    Цитата
    BEGIN: DIV
    DATA
    END: DIV
    Всё правильно. Но вот незадача - после закрытия первого открытого тега обработчик работать не хочет. То есть делаю так:
    Цитата
    <div>
    </div>
    <br>
    ...
    Всё равно выводится только
    Цитата
    BEGIN: DIV
    DATA
    END: DIV
    Это первый вопрос: я знаю, конечно, что xml без рутового элемента - это не по стандарту, но нельзя ли мне как нибудь разобрать файл до конца.
    Далее. Разбираю
    Цитата
    <div>
    ...
    <br>
    ...
    </div>
    Обработчики получают:
    Цитата
    BEGIN: DIV
    DATA:
    BEGIN: BR
    DATA:
    То есть теряется последний элемент. Всегда. А вот если закрыть элемент <br> : <br/> то всё нормально, обработчик конечного элемента срабатывает (END: DIV) Вот второй вопрос: можно ли мне и этого избежать любым способом.

    Спасибо всем кто осилил что я тут понаписал 8-)
      dark_barker
      Цитата
      вот если закрыть элемент <br> : <br/> то всё нормально
      А ты еще подсунь ему бинарник, а потом удивляйся, почему не работает.
      <br> - это ошибка.
      Правильно будет <br /> или <br></br>
        nerezus
        Я так и написал - я знаю, что это не по правилам, но можно ли выбраным мной способом (или другим, но стандартным, т.к. перенастраивать сервер и/или добавлять модули не предполагается) решить мою проблему. Пусть он не находит конец этих тегов незакрытых, они мне не нужны - мне надо обработать только определенные элементы (они заведомо будут по стандарту), пусть для этих неправильных элементов срабатывает только обработчик стартового элемента, но причем тут последний элемент то?
        А вручную парсить html-ку не очень охота :wacko:
          dark_barker ну а тогда какие претензии к парсеру XML, если ты ему даешь не XML, а черт знает что.
            Если тебе нужно обработать только определённые элементы - стоит ли вообще заморачиваться с XML-парсером? Иногда и регулярных выражений бывает более, чем достаточно.
              nerezus
              Ну опять 25 :D

              SiMM
              Да, но мне надо заменить что то типа
              ExpandedWrap disabled
                <simple:element attr1="val1" attr2="val2" attr3="val3"/>
              на другую часть, зависящую от параметров-аттрибутов. Регуляркой тут разбирать ООчень неприятно.
                Цитата dark_barker @
                Регуляркой тут разбирать ООчень неприятно.
                Не вижу никаких неприятностей. Врочем - хозяин - барин.
                  Попробуй развить следующую мысль:
                  ExpandedWrap disabled
                    $xml = '<root>'.str_replace('<br>', '<br/>', $html).'</root>';
                    parse($xml);
                    polyglott
                    Так мне все что-ли так заменять. Сколько их незакрывающихся то бывает в хтмл? Как минимум <hr> <br> <img > итд итп. Но надо подумать на этот счёт :rolleyes:
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0271 ]   [ 15 queries used ]   [ Generated: 27.04.24, 19:12 GMT ]