我有以下代码:
<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库,但我不想使用它)
答案 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 的姊妹库。