2009-07-21 2 views
2

Метод «addChild» для SimpleXMLElement кажется, что он должен быть правильным выбором, но, по-видимому, он принимает только строки, представляющие тэг нового ребенка.Есть ли способ добавить PHP SimpleXMLElement в другой SimpleXMLElement?

Существует нотация объекта для ссылки на узлы дерева и их установка, например. $ simpleXMLNode-> child = значение, но это, похоже, работает только для простых текстовых/числовых значений. Если бы я попробовать следующее:

$s = new SimpleXMLElement('<root/>'); 
$t = new SimpleXMLElement('<child/>'); 
$s->a = $t; 
echo $s->asXML() 

я получаю:

<?xml version="1.0"?> 
<root><a></a></root> 

, когда я надеялся:

<?xml version="1.0"?> 
<root><a><child/></a></root> 

Я думал, что преобразования $ T в строку, а затем добавить его (после изъятия декларации XML):

$s->a = substr($t->asXML(),22) 

Но это дает:

<?xml version="1.0"?> 
<root><a>&lt;child/&gt;</a></root> 

Опять же, не то, на что я надеялся.

Есть ли типичный способ достижения такого рода вещей с помощью SimpleXML?

+0

Возможный дубликат [PHP - SimpleXML - AddChild с другим SimpleXMLElement] (http://stackoverflow.com/questions/4778865/php-simplexml-addchild-with-another-simplexmlelement) – Ben

ответ

7

Эй неизвестно. Для этого вы должны использовать интерфейс DOMElement для своих объектов SimpleXML.

<?php 

$s = new SimpleXMLElement('<root/>'); 
$t = new DOMElement('child'); 

$dom = dom_import_simplexml($s); 
$dom->appendChild($t); 

echo $s->asXML(); 
// <root><child/></root> 

Если вам нужна более подробная информация, сообщите мне. В документации и комментариях для метода dom_import_simplexml() есть несколько примеров: http://php.net/dom_import_simplexml

1

Я не уверен, что это поможет, но вы также можете расширить SimpleXML, чтобы работать так, как вы ожидаете. Вот проект, над которым я работал в классе bLibrary Xml. Вы можете посмотреть на него, чтобы настроить SimpleXml на работу, как вы ожидаете.

Смежные вопросы