我有以下代码:
<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 函数可以删除文档元素?
我知道有一些 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 的姐妹库。
是的,您可以:
$xmlstr = <<<'XML'
<nutrition>
<code>
<lol1>energy</lol1>
<lol2>protein</lol2>
<lol3>fat</lol3>
</code>
</nutrition>
XML;
$xml = new SimpleXMLElement($xmlstr);
foreach ($xml->xpath('/nutrition/child::code[1]') as $node) {
$unwrappedXml = new \SimpleXMLElement($node->asXML());
break;
}
echo $unwrappedXml->asXML();