使用SimpleXML删除ROOT节点

时间:2015-03-14 01:21:27

标签: php simplexml

我有以下代码:

<nutrition>
    <code>
        <lol1>energy</lol1>
        <lol2>protein</lol2>
        <lol3>fat</lol3>
    </code>
</nutrition>

我希望:

<code>
    <lol1>energy</lol1>
    <lol2>protein</lol2>
    <lol3>fat</lol3>
</code>

是否有任何SimpleXML函数可以删除ROOT节点?

(我知道有一些DOM库,但我不想使用它)

1 个答案:

答案 0 :(得分:0)

  

我知道有一些DOM库,但是我不想使用它

在PHP SimpleXML中,技术上不可能重命名文档元素(您调用该根节点)。

实际上你也不能用DOMDocument重命名它。但与SimpleXML不同,您可以轻松地用DOMDocument::replaceChild替换元素。

使用给定的输入:

$buffer = <<<XML
<nutrition>
    <code>
        <lol1>energy</lol1>
        <lol2>protein</lol2>
        <lol3>fat</lol3>
    </code>
</nutrition>
XML;

首先创建 DOMDocument

$doc                     = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->formatOutput       = true;

然后在这里加载您的XML(例如字符串$buffer):

$doc->loadXML($buffer);

获取即将成为文档元素:

$code = $doc->documentElement->getElementsByTagName('*')->item(0);

替换文档元素和输出以显示它是否有效:

$doc->replaceChild($code, $doc->documentElement);
$doc->save('php://output');

这给出了以下输出:

<?xml version="1.0"?>
<code>
  <lol1>energy</lol1>
  <lol2>protein</lol2>
  <lol3>fat</lol3>
</code>

就是这样。希望这仍然有用,即使你似乎不喜欢DOMDocument。但是不要害怕它,它是 SimpleXMLElement 的姊妹库。