Объединение двух XML

cryo

Guest
Объединение двух XML

Использую DOMXML. Как можно объединить два дерева xml? Попытался сделать примерно следующим образом :
PHP:
$doc1 = domxml_new_doc("1.0");
$doc2 = domxml_new_doc("1.0");

$doc1root=$doc1->create_element("doc1root");
$doc2root=$doc2->create_element("doc2root");
$doc1->append_child($doc1root);
$doc2->append_child($doc2root);

$doc1root->append_child($doc2root) (или $doc2);
В результате получаю в общем-то логичное сообщение об ошике - элемент $doc2root не принадлежит $doc1. Вопрос, как же сделать объединение двух (или более) объектов domxml.
 

cryo

Guest
А где можно почитать нормальное описание на domxml кроме как в комментариях на php.net? А то ведь смотрел clone_node в help - там функция не документирована... Но откуда-то, же тебе стало известно ее действие. :)
 

znick

Guest
Не корректно клонируется

Originally posted by [DAN]
$doc1root->append_child($doc2root->clone_node(true));
Есть xmldoc1 и xmldoc2 нужно вставить xmldoc1->root в подузел xmldoc2.
Выполняю как ты сказал, РЕЗУЛЬТАТ:
Вставляет только пустой узел (без дочерних и атрибутов):
<root2>
<child1>
...
<tagname_root_from_doc1/>
</child1>
...
</root2>
 

cryo

Guest
Попробовал только что, все нормально - вставляется целиком все дерево...
 

znick

Guest
Originally posted by cryo
Попробовал только что, все нормально - вставляется целиком все дерево...
Узлы точно из разных документов?
Может дело в версии XML-парсера, у меня 1.95.2 у тебя какой.
 

Макс

Старожил PHPClub
А где можно почитать нормальное описание на domxml кроме как в комментариях на php.net?
не знаю насколько оно нормальное но все же :
http://detail.phpclub.net/2003-05-12.htm
 

cryo

Guest
Автор оригинала: znick
Узлы точно из разных документов?
Может дело в версии XML-парсера, у меня 1.95.2 у тебя какой.
Вот код:
PHP:
$doc1 = domxml_new_doc("1.0"); 
$doc2 = domxml_new_doc("1.0"); 

$doc1root=$doc1->create_element("doc1root"); 
$doc2root=$doc2->create_element("doc2root"); 
$doc1->append_child($doc1root); 
$doc2->append_child($doc2root); 

$text=$doc2->create_text_node("Some Text");
$doc2parent = $doc2->create_element("doc2parent");
$doc2root->append_child($doc2parent);
$doc2parent->append_child($text);

$doc1root->append_child($doc2root->clone_node(TRUE)); 
echo($doc1->dump_mem(TRUE));
Вот результат:

<?xml version="1.0" \?>
<doc1root>
<doc2root>
<doc2parent>Some Text</doc2parent>
</doc2root>
</doc1root>
И вырезка из phpinfo() касаемо domxml:

domxml
DOM/XML enabled
DOM/XML API Version 20020815
libxml Version 20507
HTML Support enabled
XPath Support enabled
XPointer Support enabled
DOM/XSLT enabled
libxslt Version 1.0.30
libxslt compiled against libxml Version 2.5

Expat версии 1.95.6
 

znick

Guest
Originally posted by cryo
...
$doc1root->append_child($doc2root->clone_node(TRUE));
...
Спасибо за помощь!
Все дело в параметре - true, только сним клонируются атрибуты и детишки.
 

vacuumtrade

Новичок
Добрый день. Есть два xml файла такого формата:
1)
<full_list>
<list>
<block id="16694">
<name>Полное имя</name>
<short_name>Краткое имя</short_name>
<advcampaign_id>1667</advcampaign_id>
<logo>/link.html</logo>
</block>
<block id="16695">
<name>Полное имя</name>
<short_name>Краткое имя</short_name>
<advcampaign_id>1664</advcampaign_id>
<logo>/link.html</logo>
</block>
</list>
</full_list>

2)
<block>
<advcampaign_id>1667</advcampaign_id>
<link>Ссылка</link>
</block>

Как можно сделать так, чтобы значение поля <link></link> из второго xml подставлялось в первый в том случае, если значение полей <advcampaign_id></advcampaign_id> в первом и втором файле совпадают.
 
Сверху