Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加子元素时PHP DOMDocument未命中特征线_Php_Xml_Domdocument - Fatal编程技术网

附加子元素时PHP DOMDocument未命中特征线

附加子元素时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("

我试图恢复XML文件并添加一个新元素,但最后它似乎错过了“\n”

例如,原始文件如下

$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
vs
W 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();