Метод «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><child/></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 на работу, как вы ожидаете.