附加子元素时PHP DOMDocument未命中特征线
我试图恢复XML文件并添加一个新元素,但最后它似乎错过了“\n” 例如,原始文件如下附加子元素时PHP DOMDocument未命中特征线,php,xml,domdocument,Php,Xml,Domdocument,我试图恢复XML文件并添加一个新元素,但最后它似乎错过了“\n” 例如,原始文件如下 $doc = new DOMDocument; $doc->formatOutput = true; $node = $doc->createElement("root"); $ele = $doc->createElement("first-ele", 'ele1'); $node->appendChild($ele); $ele2 = $doc->createElement("
$doc = new DOMDocument;
$doc->formatOutput = true;
$node = $doc->createElement("root");
$ele = $doc->createElement("first-ele", 'ele1');
$node->appendChild($ele);
$ele2 = $doc->createElement("sec-ele", 'ele2');
$node->appendChild($ele2);
$doc->appendChild($node);
$data_string = $doc->saveXML();
echo $doc->saveXML();
输出很好
<?xml version="1.0"?>
<root>
<first-ele>ele1</first-ele>
<sec-ele>ele2</sec-ele>
</root>
输出似乎错过了特征线
<?xml version="1.0"?>
<root>
<first-ele>ele1</first-ele>
<sec-ele>ele2</sec-ele>
<third-ele>third</third-ele></root>
ele1
ele2
第三
Demo~默认情况下,解析器保留空白。它们被放入文本节点中。实际上,
根节点
元素节点有五个子节点。换行符和缩进的两个元素和三个文本节点
现在,您将在最后一个空白文本节点之后添加第三个元素节点。序列化程序识别混合类型的子节点,并且不添加额外的空格(它们可能会更改/中断含义:Word
vsW ord
)
这里有一个属性DOMDocument::preserveWhiteSpace
,您可以在加载XML之前将其设置为false。在这种情况下,解析器不会创建任何空白文本节点,子节点也不会是混合类型
$new_doc = new DOMDocument;
$new_doc->preserveWhiteSpace = false;
$new_doc->loadXML($data_string);
$new_doc->formatOutput = true;
$root = $new_doc->documentElement;
$new_element = $new_doc->createElement('third-ele', 'third');
$root->appendChild($new_element);
echo $new_doc->saveXML();
$new_doc = new DOMDocument;
$new_doc->preserveWhiteSpace = false;
$new_doc->loadXML($data_string);
$new_doc->formatOutput = true;
$root = $new_doc->documentElement;
$new_element = $new_doc->createElement('third-ele', 'third');
$root->appendChild($new_element);
echo $new_doc->saveXML();