как писать с помощью DOM?

wanderer

PHP - rulez!...
как писать с помощью DOM?

ну вот... установил я DOM... (недавно спрашивал как его млин поинсталить и хороший человек ответил)...
записывать новые child между корнем я умею, типа:
<mesall> #корень

<mes что-то=что-то> - слздаем это сообщение....
</mes>

</mesall>

------------------
а вто как создавать новый child в уже СОЗДАННОМ дпугом child'е????
надеюсь понятно объяснил....
 

slach

Новичок
хыхы
да просто ответ в мануале есть, я думал ты САМ разберешься...

главное понять. что DOM - это Document Object Model - НАБОР Объектов...
соответсвенно, чтобы добавить что то внутри документа ... надо сначала до этого объекта достучаться...

сделать это можно либо через XPath (см. xpath_eval () xpath_new_context() и т.п.) если DOM дерево объектов создано из строки\файла... и тебе надо просто добавить туда что то...

либо если создание документа полностью тобой контролируется, тогда через простейший new_child()
примерно вот так

PHP:
<?php
//cоздаем DOM Document
$doc = domxml_new_xmldoc("1.0");
//создаем корневой узел 
$root = $doc->add_root("HTML");
//когда мы добавляем новый элемент в DOM дерево, мы должны явно указать ему предка, это может быть либо корневой элемент (в нашем случае ссылку на него мы получили в $root)
//либо любая произвольная нода =) такая как $head или $body
$head = $root->new_child("HEAD", "");
$title=$head->new_child("TITLE", "test");
$head->set_attribute("Language", "ru");
$body = $root->new_child("BODY","");
$p1 = $body->new_child("P","test");
//выводим документ
$doc->dumpmem();
?>
ЗЫ. чем больше я работаю с MSXML3.DOMDocument ;( тем более я прихожу к выводу, что PHP DOMXML пока еще детская игра в песочнице =(
 

[DAN]

Старожил PHPClub
Автор оригинала: slach
чем больше я работаю с MSXML3.DOMDocument ;( тем более я прихожу к выводу, что PHP DOMXML пока еще детская игра в песочнице =(
Позволь с тобой не согласиться. Не все методы DOM-модели пока что реализованы в этом модуле, но и реализованых на сегодняшний день не так уж и мало. А имея в инструментарии XPath можно сделать все, что необходимо.
И почему DOMXML, по-твоему, детская игра ?
 

slach

Новичок
DAN, ты не понял...
я имел ввиду что MSXML3-4 парсер и уровень его интеграции и исполнения много выше, чем то что сейчас есть в PHP DOMXML Extention. хотя libxml2 и libxslt уже давно обладают всем необходимым инструментарием =)


покажи пример работы с XPath
хочу решить простейшую задачу
1) загрузить из файла XML заготовку
2) получить через XPath ... NodeSet
3) пройтись по этому NodeSet и надобавлять туда child'ов
4) cделать с этим NodeSet'ом ... xslt трансформацию, используя друго DOM документ

можно сделать такое сейчас на PHP 4.2.1??
плиз... кинь пример кода
я просто третий месяц уже пишу на ASP... не хочу терять форму =(
 

wanderer

PHP - rulez!...
а что делать когда много корней??? типа есть:
<allmes>
<mes num="1">
<title>1</title>
</mes>
<mes num="2">
<title>2</title> #а записать надо именно сюда! допустим добавить: <title>2.1</title>
</mes>
<mes num="3">
<title>3</title>
</mes>
<mes num="4">
<title>4</title>
</mes>
</allmes>

?????????????????? фэнкс, за все выше cказанное! а МАНУЛА у меня нет, а так как инет УЖАСНЫЙ, то качать его просто никак!
P.S. кстати дай адресок, можт как нить взгляну! желательно на русском!
 

wanderer

PHP - rulez!...
народ!.... помогите! плз!... мануал почитал, чето ненашел ничего по add_child() и new_child()...... ХЕЛП!......
 

[DAN]

Старожил PHPClub
Вот я тут набросал примеры, как просили:
http://dan.aitart.ru/domxml/xpath.php
http://dan.aitart.ru/domxml/addchild.php
http://dan.aitart.ru/domxml/addchild_xpath.php

Исходники:
http://dan.aitart.ru/domxml/xpath.phps
http://dan.aitart.ru/domxml/addchild.phps
http://dan.aitart.ru/domxml/addchild_xpath.phps

PHPInfo & others:
http://dan.aitart.ru/domxml/phpinfo.htm
http://dan.aitart.ru/domxml/file.xml
http://dan.aitart.ru/domxml/file.xsl

Вобщем-то модуль еще очень далек от совершенства.
Но тем не менее есть много возможностей для работы с DOM-объектами.

to wanderer:
Сейчас можно спокойно работать с DOM-объектом в пхп, используя стандартные методы DOM модели. Выбрать нужный узел не составляет никакой проблемы.
И еще, скачай последний мануал с php.net, там более-менее нормально все написано, в т.ч. про устаревшие методы add_child и new_child. Если возникнет непонимание, рекомендую посмотреть исходники модуля DOMXML. Там уж все четко написано :)
 

Sababa

Guest
бррр.. ничего не понимаю, а откуда такая замечательная функция как

domxml_xslt_stylesheet_doc

Смотрел манул по DOMXML нету там такой
 

[DAN]

Старожил PHPClub
Автор оригинала: Sababa
бррр.. ничего не понимаю, а откуда такая замечательная функция как

domxml_xslt_stylesheet_doc

Смотрел манул по DOMXML нету там такой
Там много чего замечательного, о чем в мануале не пишут :)
Модуль всего лишь как полгода разрабатывается.
Я ж говорю, смотрите исходники модуля, там много чего вкусного найдете.
Да и get_class_methods() никто не отменял :)
Я в одной из версий DOMXML насчитал 54 метода. А в доке только 5 было описано :)

Уверен, скоро модуль DOMXML обретет свою силу.
 

wanderer

PHP - rulez!...
нда... я чё-то тоже не понял: как выбрать-то?
вот у меня есть:

$xml = join("", file("forum.xml"));
$xml = xmldoc($xml);

$mesNode = $xml->add_root("mes"); #вот как "объяснить" в какой именно????
$remesNode = $mesNode->new_child("remes", null);
$remesNode->set_attribute("num", $newmes["num"]);
$remesNode->set_attribute("name", $newmes["name"]);
$remesNode->set_attribute("subject", $newmes["subject"]);
$remesNode->set_attribute("email", $newmes["email"]);
$remesNode->set_attribute("date", $newmes["date"]);
$remesNode->set_attribute("mes", $newmes["mes"]);


$text = $xml->dumpmem();
$fp = fopen("forum.xml", "w");
fwrite($fp, $text);
fclose($fp);
 

wanderer

PHP - rulez!...
да..! и где взять последнюю версию php_domxml.dll ???
а то он половину функций "не знает"!!
 

[DAN]

Старожил PHPClub
смотри исходники того, что я написал.
Там аж целых 2 возможности добавлять потомков _в_уже_существующий_DOM_объект.
Где либу под мастдай взять, я не знаю. В последнем пхп были в папке experemental.
Попробуй сам скомпилить :)
 

wanderer

PHP - rulez!...
ну ладно..... и на этом спасибо..... но только он чето у меня не работает..... может быть из-зп старой версии..... вот что он мне пишет:
Fatal error: Call to a member function on a non-object in d:\www\www\forum\news\t.php on line 11

это есть:
$elements = $domXml->get_elements_by_tagname('news');
 

[DAN]

Старожил PHPClub
на 99.(9)% из-за старой версии модуля.
Я самую последнюю из cvs.php.net позавчера поставил.
Но и на 4.2.0 тоже должно работать.
 

wanderer

PHP - rulez!...
для Линукса или МАСТ_ДАЯ? да и скачал я новый рнр 4.2.1 и ВСЁ РАВНО не работает??????!!!! что бы это могло быть?:eek:
вот какие ошибки:
Fatal error: Call to undefined function: domxml_xslt_stylesheet_doc() in d:\www\www\forum\news\addchild.php on line 12
это есть: $styleSheet = domxml_xslt_stylesheet_doc( $domXsl );
и
Fatal error: Call to a member function on a non-object in d:\www\www\forum\news\addchild.php on line 21
$elements = $domXml->get_elements_by_tagname('vote');
 

wanderer

PHP - rulez!...
все! всем БОЛЬШОЕ спасибо! у меня все получилось! ссылку на результат скоро дам! ща пишу всякие прибамбасы!
 

baskervilley

Новичок
А теперь уже эти примеры точно недоступны? Хотелось бы посмотреть, да ссылки не работают :(

\
Автор оригинала: [DAN]
Вот я тут набросал примеры, как просили:
http://dan.aitart.ru/domxml/xpath.php
http://dan.aitart.ru/domxml/addchild.php
http://dan.aitart.ru/domxml/addchild_xpath.php

Исходники:
http://dan.aitart.ru/domxml/xpath.phps
http://dan.aitart.ru/domxml/addchild.phps
http://dan.aitart.ru/domxml/addchild_xpath.phps

PHPInfo & others:
http://dan.aitart.ru/domxml/phpinfo.htm
http://dan.aitart.ru/domxml/file.xml
http://dan.aitart.ru/domxml/file.xsl

Вобщем-то модуль еще очень далек от совершенства.
Но тем не менее есть много возможностей для работы с DOM-объектами.

to wanderer:
Сейчас можно спокойно работать с DOM-объектом в пхп, используя стандартные методы DOM модели. Выбрать нужный узел не составляет никакой проблемы.
И еще, скачай последний мануал с php.net, там более-менее нормально все написано, в т.ч. про устаревшие методы add_child и new_child. Если возникнет непонимание, рекомендую посмотреть исходники модуля DOMXML. Там уж все четко написано :)
 

slach

Новичок
basketvilley
дигер ты нехороший
посмотри какой год давности ???
эти примеры как минимум буду скорее всего некоректны

читай
http://php.net/manual/en/ref.dom.php
переходи на php5.1
и работай себе наздоровье по стандарту
 
Сверху