我有一个有时有空节点的 XML 字符串。当使用 simplexml_load_string 解析它时,解析器将任何空节点( example <node></node>)解释为空的 SimpleXMLElement 。实际上,我更希望它们作为空字符串出现,或者完全省略。
我尝试过使用 LIBXML_NOBLANKS ,如下所示,但似乎没有效果。下面是一些演示这种情况的代码。节点“p2”为空:
$xml = "<xml><p1>1</p1><p2></p2><p3>3</p3></xml>";
$obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOBLANKS);
header("Content-type: text/plain");
echo "STRING\n-----\n" . $xml;
echo "\n\nOBJ\n---\n" . print_r($obj,1);
echo "\n\nJSON\n----\n" . json_encode($obj);
Run Code Online (Sandbox Code Playgroud)
这是空节点的工作示例:
$nodes = $rootNode->xpath("//*[text()='']");
foreach ($nodes as $node) {
unset($node->{0});
}
Run Code Online (Sandbox Code Playgroud)
unset($node->{0})- 是一个破坏该节点并将其从父节点中删除的技巧。