2014-06-07 66 views
1

我无法将XML文档加载到保留空标签和空字符串的DOM中。在这里,例如:如何区分DOMDocument中的空元素和空字符串?

$doc = new DOMDocument("1.0", "utf-8"); 

$root = $doc->createElement("root"); 
$doc->appendChild($root); 

$element = $doc->createElement("element"); 
$root->appendChild($element); 

echo $doc->saveXML(); 

产生下面的XML:

<?xml version="1.0" encoding="utf-8"?> 
<root><element/></root> 

空元件,正如预期的。现在让我们将空的文本节点添加到元素中。

$doc = new DOMDocument("1.0", "utf-8"); 

$root = $doc->createElement("root"); 
$doc->appendChild($root); 

$element = $doc->createElement("element"); 
$element->appendChild($doc->createTextNode("")); 
$root->appendChild($element); 

echo $doc->saveXML(); 

产生下面的XML:

与空大小的字符串
<?xml version="1.0" encoding="utf-8"?> 
<root><element></element></root> 

非空元素。好!但是,当我试图做的事:

$doc = new DOMDocument(); 
$doc->loadXML($xml); 

echo $doc->saveXML($doc); 

对这些XML文档我总是

<?xml version="1.0" encoding="utf-8"?> 
<root><element/></root> 

即空大小的字符串被删除,只是空元素被加载。我相信它发生在loadXML()上。 有没有什么办法说服DOMDocument的loadXML()不要将空字符串转换为空元素?如果DOM将TextNode的空值字符串作为元素的子元素,将会更好。

解决方法需要在PHP DOM中,因为进一步加载的数据会发生什么情况。

+0

顺便说一句,你的$ xml是什么? – fortune

+0

[如何用空字符串值(以Java)创建XML文本节点](http://stackoverflow.com/questions/3884876/how-to-create-an-xml-text-node-with -an空字符串值-在-java的)。一个空的文本节点(零长度字符串)不是文本节点,请参阅http://stackoverflow.com/a/3885737/2044940 – CoDEmanX

+0

任意xhtml内容。如果文档充当Content-Type:text/html,我发现xhtml的完全有效让浏览器正确理解它。所以我的想法是在交付之前加载xhtml以查找标记是否有空的