我无法将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中,因为进一步加载的数据会发生什么情况。
顺便说一句,你的$ xml是什么? – fortune
[如何用空字符串值(以Java)创建XML文本节点](http://stackoverflow.com/questions/3884876/how-to-create-an-xml-text-node-with -an空字符串值-在-java的)。一个空的文本节点(零长度字符串)不是文本节点,请参阅http://stackoverflow.com/a/3885737/2044940 – CoDEmanX
任意xhtml内容。如果文档充当Content-Type:text/html,我发现xhtml的完全有效元素不能正确呈现。它必须表示为让浏览器正确理解它。所以我的想法是在交付之前加载xhtml以查找标记是否有空的元素并相应地修复它。如果文件保存在本地,则浏览器使用text/html,因此更改服务器上的Content-Type无疑是不容置疑的。 –