Nod作为孩子添加到xml中,想要兄弟(SimpleXMLElement)

时间:2015-10-23 13:04:46

标签: php xml simplexml

我想将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>

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

XML输出是:

<?xml version="1.0"?>
<Request RequestType="1"><Data/><Data2/></Request>

换句话说,DataData2元素是兄弟,但是短空标记。如果浏览器将其加载为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>