我想我想通了。像這樣由於代碼:
$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的接口)。
訣竅是在jSON編碼之前將simpleXML對象轉換爲數組。 – null 2009-01-03 04:55:21