Nod 添加到 xml 作为 child,想要兄弟(SimpleXMLElement)

Nod added into xml as child, wanted sibling (SimpleXMLElement)

我想将 Data2 添加为请求的 child,但它却被添加为数据的 child。

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>

我错过了什么?

谢谢!

XML 输出为:

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

换句话说,DataData2 元素是兄弟元素,但是是短的空标签。如果浏览器将其加载为 HTML,它将尝试修复丢失的结束标记。如果将其解析为 XML,则不会发生这种情况。确保发送正确的内容类型 header:

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>