我想我知道发生了什么。给定这样的代码:
$xml = new SimpleXMLElement('<xml></xml>');
$xml->addChild('node','value');
print_r($xml);
$xml = new SimpleXMLElement('<xml></xml>');
$xml->addChild('node','');
print_r($xml);
$xml = new SimpleXMLElement('<xml></xml>');
$xml->addChild('node');
print_r($xml);
输出是这样的:
SimpleXMLElement Object
(
[node] => value
)
SimpleXMLElement Object
(
[node] => SimpleXMLElement Object
(
[0] =>
)
)
SimpleXMLElement Object
(
[node] => SimpleXMLElement Object
(
)
)
所以,要做到这一点,以便在 #2 的情况下不创建空元素(即,如果您不知道第二个参数是否为空字符串),您可以执行类似的操作这个:
$mystery_string = '';
$xml = new SimpleXMLElement('<xml></xml>');
if (preg_match('#\S#', $mystery_string)) // Checks for non-whitespace character
$xml->addChild('node', $mystery_string);
else
$xml->addChild('node');
print_r($xml);
echo "\nOr in JSON:\n";
echo json_encode($xml);
输出:
SimpleXMLElement Object
(
[node] => SimpleXMLElement Object
(
)
)
Or in JSON:
{"node":{}}
这是你想要的吗?
就我个人而言,我从不使用 SimpleXML,这不仅是因为这种奇怪的行为——它仍处于主要开发阶段,并且在 PHP5 中缺少 2/3 的 DOM 操作所需的方法(如 deleteChild、 replaceChild 等)。
我使用 DOMDocument(标准化、快速且功能齐全,因为它是 libxml2 的接口)。