2011-11-05 74 views
0

我有一個關於使用DOMDocument和創建XML的問題。PHP和DOMDocument

我有個PHP程序

  1. 負載在XML的XML文件
  2. 處理中的每個節點(行);將其發送到另一過程,然後返回一個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返回給客戶,這樣我可以再通過jQuery生成HTML。

任何幫助,將不勝感激。

此外,如果任何人都可以提供多達這樣做的潛在的更有效的方法,那簡直太好了太:)

感謝。

羅布

+0

決定在PHP中處理XML所需的庫。您正在同時使用SimpleXML和PHPDOM,我認爲它們不能很好地協作。 – timdream

+0

你是指我最初的simplexml_load_file()?如果是這樣,不知道這會影響我的最終輸出,因爲這只是一個驅動程序文件。謝謝你的評論。 – Rob

+0

我改變了行$ subNode = $ addressXML-> asXML();使用saveXML()與結果相同:( – Rob

回答

5

要追加XML(作爲字符串)到另一個元素,爲您打造一個document fragment您可以追加然後:

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

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

這將原始的XML轉換成DOM文檔元素,它的製作使用DOMDocumentFragment::appendXML函數。

編輯:或者在您的使用情況(THX的意見),就可以直接使用了SimpleXML對象,並import到您的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); 

無需響應爲轉換字符串,然後用這個替換操作。

+1

或深入導入節點並追加它 – Gordon

+1

我認爲他指的是importnode:http://php.net/manual/en/domdocument.importnode.php – CD001

+0

補充說:現在回答這個問題,這真的很好知道 – hakre