我对使用DOMDocument和创建XML有疑问。
我有一个PHP程序
我遇到的问题是,在我尝试将最终文档返回给客户端之前,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返回给客户端,以便我可以通过jQuery生成HTML。
任何帮助都将不胜感激。
此外,如果任何人都可以提供一种更有效的方式来做到这一点,那也很棒:)
感谢。
罗布
答案 0 :(得分:5)
要将XML(作为字符串)附加到另一个元素中,您可以创建一个document fragment,然后可以附加:
// create new node
$subElt = $domDoc->createElement('MyResponse');
// create new fragment
$fragment = $domDoc->createDocumentFragment();
$fragment->appendXML($cleanSubNode);
$subElt->appendChild($fragment);
这会将原始XML转换为domdocument元素,它正在使用DOMDocumentFragment::appendXML
函数。
编辑:或者在您的用例中(对于评论),您可以直接使用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);
不需要将响应转换为字符串,并使用它执行替换操作。