Есть ли способ добавить PHP SimpleXMLElement в другой SimpleXMLElement?

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

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

$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?

Привет, неизвестно. Для этого вы должны использовать интерфейс 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

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