PHP и DOMDocument

У меня вопрос относительно использования DOMDocument и создания XML.

У меня есть PHP-программа, которая

  1. загружает в XML-файл
  2. обрабатывает каждый узел (строку) XML; отправляет его другому процессу, который затем возвращает элемент XML
  3. Я получаю строковое представление узла, чтобы я мог создать (добавить) к новому результирующему дереву XML для возврата к клиенту

Проблема в том, что XML выглядит нормально, пока я не попытаюсь вернуть конечный документ обратно клиенту. Я использую saveXML (), и результирующий файл содержит & lt & gt; и т. Д. Когда я пытаюсь сделать сохранение в файл [save ()], я также получаю эти результаты. В течение нескольких часов просматривали доски PHP.

Вот мой код:

<?php header('Content-type: text/xml'); // **** Load XML **** $xml = simplexml_load_file('Test1.xml'); // Instantiate class; work with single instance $myAddress = new myAddressClass; $domDoc = new DOMDocument('1.0', 'UTF-8'); $domDoc->formatOutput = true; $rootElt = $domDoc->createElement('root'); $rootNode = $domDoc->appendChild($rootElt); //Go through each row of XML and process each address foreach($xml->Row as $row) { //fire off function against instance // returns SimpleXMLElement $resultXMLNode = $myAddress->buildRequest() ; // need XML representation of node $subNode = $addressXML->asXML(); // strip out extraneous XML def $cleanSubNode = str_replace('<?xml version="1.0"?>', '', $subNode); // create new node $subElt = $domDoc->createElement('MyResponse', $cleanSubNode ); //append subElmt node $rootNode->appendChild($subElt); } // need full XML doc properly formatted/valid $domDoc->saveXML(); ?> 

BTW, я возвращаю XML к клиенту, чтобы затем я мог создавать HTML через jQuery.

Любая помощь будет оценена по достоинству.

Кроме того, если кто-то может предложить потенциально более эффективный способ сделать это, это тоже здорово 🙂

Благодарю.

обкрадывать

Чтобы добавить XML (как строку) в другой элемент, вы создаете фрагмент документа, который вы можете добавить затем:

 // create new node $subElt = $domDoc->createElement('MyResponse'); // create new fragment $fragment = $domDoc->createDocumentFragment(); $fragment->appendXML($cleanSubNode); $subElt->appendChild($fragment); 

Это преобразует необработанный XML в элементы domdocument, он использует DOMDocumentFragment::appendXML .

Изменить: альтернативно в вашем прецеденте (thx к комментариям) вы можете напрямую использовать объект simplexml и импортировать его в свой domdocument:

 // create subelement $subElt = $domDoc->createElement('MyResponse'); // import simplexml document $subElt->appendChild($domDoc->importNode(dom_import_simplexml($resultXMLNode), true)); // We insert the new element as root (child of the document) $domDoc->appendChild($subElt); 

Нет необходимости преобразовывать ответ в строку и выполнять операцию замены, которую вы делаете с ней, с этим.