PHP и DOMDocument - PullRequest
       8

PHP и DOMDocument

0 голосов
/ 05 ноября 2011

У меня есть вопрос, касающийся использования 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();             

?>

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

Буду признателен за любую помощь.

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

Спасибо.

Rob

1 Ответ

5 голосов
/ 05 ноября 2011

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

// create new node
$subElt = $domDoc->createElement('MyResponse');

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

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

Редактировать: В качестве альтернативы в вашем случае использования (спасибо комментариям), вы можете напрямую использовать simplexmlобъект и импортируйте его в ваш документ:

// 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);

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

...