PHP DOMDocument:可以重复使用文本节点吗?
PHP DOMDocument: may a text node be reused?
我有以下代码:
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;
$element = $doc->createElement('ROOT');
$root = $doc->appendChild($element);
$textNode = $doc->createTextNode('I should be in both nodes');
$element = $doc->createElement('FIRST');
$first = $root->appendChild($element);
$first->appendChild($textNode);
$element = $doc->createElement('SECOND');
$second = $root->appendChild($element);
$second->appendChild($textNode);
var_dump($doc->saveXML($root));
我不明白的是为什么输出是这样的:
<ROOT>
<FIRST/>
<SECOND>I should be in both nodes</SECOND>
</ROOT>
为什么第一个元素不包含文本?第二个人偷了吗? :) 因为如果我删除创建第二个元素的代码部分,第一个元素将按预期获得其文本节点。
一个节点只能有一个父节点,所以一旦你将它添加到另一个节点,它就会停留在那里。
您可以使用 cloneNode()
轻松克隆节点,但顾名思义 - 它不是同一个节点,而是一个副本。如果将以下行更改为...
$first->appendChild($textNode->cloneNode(true));
你会得到...
<ROOT>
<FIRST>I should be in both nodes</FIRST>
<SECOND>I should be in both nodes</SECOND>
</ROOT>
我有以下代码:
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;
$element = $doc->createElement('ROOT');
$root = $doc->appendChild($element);
$textNode = $doc->createTextNode('I should be in both nodes');
$element = $doc->createElement('FIRST');
$first = $root->appendChild($element);
$first->appendChild($textNode);
$element = $doc->createElement('SECOND');
$second = $root->appendChild($element);
$second->appendChild($textNode);
var_dump($doc->saveXML($root));
我不明白的是为什么输出是这样的:
<ROOT>
<FIRST/>
<SECOND>I should be in both nodes</SECOND>
</ROOT>
为什么第一个元素不包含文本?第二个人偷了吗? :) 因为如果我删除创建第二个元素的代码部分,第一个元素将按预期获得其文本节点。
一个节点只能有一个父节点,所以一旦你将它添加到另一个节点,它就会停留在那里。
您可以使用 cloneNode()
轻松克隆节点,但顾名思义 - 它不是同一个节点,而是一个副本。如果将以下行更改为...
$first->appendChild($textNode->cloneNode(true));
你会得到...
<ROOT>
<FIRST>I should be in both nodes</FIRST>
<SECOND>I should be in both nodes</SECOND>
</ROOT>