我想将Data2添加为Request的子项,但是它会被添加为Data的子项。
class xml{
public function __construct(){
$this->request_xml = new SimpleXMLElement("<Request></Request>");
$this->request_xml->addAttribute('RequestType', "1");
$this->request_xml->addChild("Data");
$this->request_xml->addChild("Data2");
var_dump($this->request_xml->asXml());
}
}
$object = new xml();
结果是:
<request>
<data>
<data2></data2>
</data>
</request>
我想要
<request>
<data></data>
<data2></data2>
</request>
我错过了什么?
谢谢!
答案 0 :(得分:2)
XML输出是:
<?xml version="1.0"?>
<Request RequestType="1"><Data/><Data2/></Request>
换句话说,Data
和Data2
元素是兄弟,但是短空标记。如果浏览器将其加载为HTML,它将尝试修复丢失的结束标记。如果将其解析为XML,则不会发生这种情况。确保您发送了正确的内容类型标题:
header('Content-type: application/xml; charset=utf-8');
如果您将SimpleXMLElements导入DOM(或者首先使用DOM更好地生成文档),您将获得更多用于保存XML的选项。
$element = dom_import_simplexml($request_xml);
echo $element->ownerDocument->saveXml(NULL, LIBXML_NOEMPTYTAG);
输出:
<?xml version="1.0"?>
<Request RequestType="1"><Data></Data><Data2></Data2></Request>