как перемещать узлы??

wanderer

PHP - rulez!...
как перемещать узлы??

вот у меня есть:
<root>
<child id="1">
</child>
<child id="2">
</child>
<child id="3">
</child>
<child id="4">
</child>
</root>
и как сделать так:
<root>
<child id="2">
</child>
<child id="3">
</child>
<child id="4">
</child>
<child id="1">
</child>
</root>
тоесть переместить???
 

wanderer

PHP - rulez!...
и ещё! как изменять в узлах что-либо!
было:
<mes num="1" st="abbbbbbbrraaaaaaaa"></mes>
стало:
<mes num="1" st="afffaaaayhdydryyyaaarrbthydrybbbba"></mes>
 

Grey_EM

Guest
Автор оригинала: wanderer
и ещё! как изменять в узлах что-либо!
было:
<mes num="1" st="abbbbbbbrraaaaaaaa"></mes>
стало:
<mes num="1" st="afffaaaayhdydryyyaaarrbthydrybbbba"></mes>
xml

------------

<?xml version="1.0" encoding="UTF-8"?>
<root>
<mes num="1" st="abbbbbbbrraaaaaaaa"/>
</root>


------------

xslt

------------

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" encoding="UTF-8"/>
<xsl:template match="root">
<mes num="1">
<xsl:attribute name="st">afffaaaayhdydryyyaaarrbthydrybbbba</xsl:attribute>
</mes>
</xsl:template>
</xsl:stylesheet>

------------
пойдет ? :)
 

Alexandre

PHPПенсионер
<mes num="1" st="abbbbbbbrraaaaaaaa"></mes>
стало:
<mes num="1" st="afffaaaayhdydryyyaaarrbthydrybbbba"></mes>
опять же используй ссылку или

// $contents - XML текст
$dom = xmldoc($contents) ; // формирование DOM объекта
$root =$dom->root(); // формирование корневого эл-та
$RootName = $root->name; // получение имени корневого эл-та
$RootContent = $root->content; // получение содержания корневого эл-та:
// Содержанием корневого узла является контектация значений всех дочерних узлов:

$Ch = $root->children(); // получение первого дочернего эл-та:
$ChildName = $Ch[1]->name; // получение имени узла первого дочернего эл-та:

$ChildContent = $Ch[1]->content; // получение содержание узла первого дочернего эл-та:
соответственно возможно и обратное

$Ch[1]->content = ' бла бла бла' ;

Как Примечание скажу, что это надо делать с текстовыми узлами
 

Alexandre

PHPПенсионер
Так же есть функции
domxml_set_content()
domxml_set_attribute()

Они точно должны помочь
 

wanderer

PHP - rulez!...
так... спасиб.. это мы заменяем текст в узлах... а как перемещать?
 

wanderer

PHP - rulez!...
... content - это как я понял содержимое между <ssss>!!!текст!!!</sss> ?...
 

Alexandre

PHPПенсионер
кстати этот способ иногда (вотпричину пока не нашел)
$Ch[1]->content = ' бла бла бла' ;
дает сбой!!!

проще использовать функции
$child->set_content('bla-bla-bla');
$attrb1->set_attribute('blu-blu-blu')
Два слова о перемещении узлов:
Алгоритм прост - выбираешь узел, а потом есть функция -
$doc->append_child($node);

<?php
$dom = xmldoc($contents)

// выбираем необходимый узел - $node
$newnode = $doc->append_child($node);
// удаляем наш узел - $node
?>

так же есть ЗАМЕЧАТЕЛЬНЫЕ функции

DomNode_insert_before()
DomNode_append_child().
DomNode_insert_before().


... content - это как я понял содержимое между <ssss>!!!текст!!!</sss> ?...
Для примера
<mes num="1" st="afffaaaayhdydryyyaaarrbthydrybbbba"></mes>
content - это пусто, т.к. между тегами <mes> ничего нет
 

Alexandre

PHPПенсионер
Я чуть чуть поспешил,
так вернее:
<?
// выбираем необходимый узел - $node

$newnode = $doc->create_element("msg") ; // создаем наш элемент
$newnode = $node; // переприсваиваем узел (его значения и аттрибуты)

$newnode = $element->insert_before($node, $element);
// - вставляем куда надо перед узлом $element
// удаляем наш узел - $node используя функцию remove_child()
?>

также есть функция DomNode_replace_node() - не входит в Рекомендации W3C - но наверно она создана именно для этих целей

но я с ней не возился...
 

Grey_EM

Guest
Автор оригинала: wanderer
э..... нет....... надо токо domxml....
Для того чтобы использовать функции модуля, обяъвленного экспериментальным, да к тому же активно и глубоко меняющегося в настоящее время, надо иметь представление о том как будет меняться этот модуль, то есть как минимум посмотреть список рассылки разработчиков. Иначе можно крепко сесть в лужу после того как спецификации модуля в очередной раз изменится.
Ты кстати в курсе что часть советов, присланных тебе, содержит вызовы устаревших (deprecated) функций?
P.S. Для того чтобы пользоваться dom api надо четко представлять себе достаточно ли будет ресурсов у системы для обработки вашего древовидного представления. Иначе вполне возможны ситуации с недостатком памяти и просто тормозами при обработке.
 

Alexandre

PHPПенсионер
Про старые ссылки - это ты зря... Все зависит от версии библиотеки, которую ты используешь... Возможно уже выставлена на экспериментальное обозрение и новая версия, но если ты ее не обновил, то работать и не будет....
 
Сверху