2012-08-01 104 views
4

我有一个有时具有空节点的XML字符串。当使用simplexml_load_string解析时,解析器会将任何空节点(示例<node></node>)解释为空的SimpleXMLElement。我其实更喜欢这些通过空字符串,或者完全省略。如何将空的XML节点转换为空字符串而不是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); 
+0

我只是做了一些测试,这看起来像XML模块中的错误。 – apfelbox 2012-08-01 23:34:32

+0

http://stackoverflow.com/questions/8603237/remove-empty-tags-from-a-xml-with-php – 2012-08-02 04:36:15

+0

感谢您的答复。我有一个黑客解决方案,涉及到转换为类似于xpath解决方案的数组,但我希望LIBXML_NOBLANKS或其他标志可以处理它,而不必枚举。 – Jason 2012-08-02 17:53:02

回答

0

下面是工作示例为空的节点:

$nodes = $rootNode->xpath("//*[text()='']"); 
    foreach ($nodes as $node) { 
     unset($node->{0}); 
    } 

unset($node->{0}) - 是destroyes这个节点,并从父节点中删除一招。

相关问题