XML paser и шаблоны

arz_user

Guest
XML paser и шаблоны

Такая фишка:
У меня шаблон выглядит так:
-------------------------------------------
<table><tr><td>
<content name="date" id="34">
</td></tr></table>
-------------------------------------------

Я разбираю его с помощью XML paser.
Но он пытается рабирать и html теги. Как сделать, чтобы парсер не трогал хтмл туги?

Помогите пожалуйста.
 

slach

Новичок
если используется стандартные ф-ции xml_*
вот отсюда
http://php.net/manual/en/ref.xml.php ???

тогда используй логику работы функций startElement и endElement
фильтруй по имени тега сам

смотри примеры по указанной мной ссылке и разбирайся
 

arz_user

Guest
Автор оригинала: slach
если используется стандартные ф-ции xml_*
вот отсюда
http://php.net/manual/en/ref.xml.php ???

тогда используй логику работы функций startElement и endElement
фильтруй по имени тега сам

смотри примеры по указанной мной ссылке и разбирайся
Я что то не нашел в данном примере моего случая.
Расскажи пожалуйста подробней как это сделать. Надеюсь ты не имеешь в виду, что мне придется описывать каждый хтмл тег?
 

slach

Новичок
ой блин ну сложно то головой подумать чуть чуть и
в функции startElement В первом примере из мануала... поставить условие фильтрации...
PHP:
function startElement($parser, $name, $attrs) {
global  $is_parsed;
 $is_parsed=!preg_match('/td|table|p|br|b|i|u/i',$name));

 if ($is_parsed) {
   ... обрабатываем начало тега...
 }
}
ты сам выбрал инструмент для работы
и сам выбрал ФОРМАТ xml документов...

хочешь обрабатывать только нужные теги, выноси их в отдельный NAMESPACE... и смотри документацию
по
http://www.php.net/manual/en/function.xml-parser-create-ns.php

http://www.php.net/manual/en/function.xml-set-start-namespace-decl-handler.php
и
http://www.php.net/manual/en/function.xml-set-end-namespace-decl-handler.php

не знаешь что такое NameSpace ???
читай материалы по XML
на www.zvon.org и www.xmlhack.ru
 

arz_user

Guest
PHP:
function startElement($parser, $name, $attrs) {
    GLOBAL $ce,$TMPL,$html,$id,$line,$cid;
if (preg_match('/include|headerpage|footerpage|menu|printrub|printcontent|content|rub|ifcontent|scs/i',$name)) {
       switch ($name) {
        case "INCLUDE":
            $html.=@implode("",@file($attrs["URL"]));
            break;
        case "TEMPLATE":
            parser("./templates/".$attrs["CLASS"]."/".$attrs["NAME"].".tmp");
            break;
/* Пропущено несколько блоков. В принципе суть и без них ясна. */
 }
        }
        else {echo "<".$name.">";} // ВОТ на счет этого я сомневаюсь. Наверное не так выводить нужно !?
    $TMPL[$name]="";
    $ce=$name;
    }
Такой способ действительно работает.Только вот дело в том, что он не пишет дополнительные атрибуты хтмл тегов (например border, size, width и т.д).
Не ужели каждый атрибут прийдтся описывать? или это можно сделать как то по другому?
Прошу извинить за нодаедливость :confused:
 

slach

Новичок
что значит НЕ ПИШЕТ ??? дополнительные аттрибуты ???
они тебе в функцию ПРИ любых раскладах попадают =))
когда стартует например тег body и т.п.

все атрибуты передаются в массиве $attrs ... их можно использовать... а можно про них вообще забыть...

а вообще, тебе видимо в сторону XSLT надо будет смотреть
опять же на ZVON.org читай спецификации по XSLT

также читай мануал по адресу:
http://php.net/manual/en/ref.xslt.php
 
Сверху