【问题标题】:php, how to clone DOMElement?php,如何克隆 DOMElement?
【发布时间】:2017-09-16 16:12:32
【问题描述】:

官方文档说 DOMElement 继承了方法 cloneNode http://php.net/manual/en/class.domelement.php 。如果我尝试克隆,它不起作用。如何将元素从一个 DOMDocument 复制到另一个?也就是说,我的头部放错了位置,因此我必须以某种方式复制头部和身体,而不是按照正确的顺序呼应它们。

ob_start();
$viewData = $this->data; 
include_once( $this->viewTemplPath.$this->file );
$buffer = ob_get_clean();
$doc = new \DOMDocument();
$doc->loadHTML($buffer);

$head = $doc->getElementsByTagName('head')->item(0);
print_r('<br><br> 184 view.php head='); var_dump($head); 

$body = $doc->getElementsByTagName('body')->item(0);
print_r('<br><br> 188 view.php body='); var_dump($body); 

$docNew = new \DOMDocument();
$headNew = $head->cloneNone(true); // Fatal error: Call to undefined method DOMElement::cloneNone()
$docNew->appendChild($headNew);
$bodyNew = $body->cloneNone(true); // Fatal error: Call to undefined method DOMElement::cloneNone()
$docNew->appendChild($bodyNew);

echo $docNew->saveHTML();  

【问题讨论】:

  • 也许你应该使用cloneNode() 而不是cloneNone()
  • 也许是-&gt;cloneNode?不是cloneNone
  • 另外我建议你使用一些IDE来防止这样的错误:)
  • IDE 是什么意思?
  • 这就是我所说的弗洛伊德错字!

标签: php dom clone domdocument


【解决方案1】:

为了克隆元素,解决方案是将我要克隆的元素导入到文档中,然后将其添加为子元素:http://php.net/manual/en/domdocument.importnode.php 这不会通过错误,并与新文档相呼应。 但这并不能解决头部错位的问题。

ob_start();
$viewData = $this->data; 
include_once( $this->viewTemplPath.$this->file );
$buffer = ob_get_clean();
$doc = new \DOMDocument();
$doc->loadHTML($buffer);
$head = $doc->getElementsByTagName('head')->item(0);
$body = $doc->getElementsByTagName('body')->item(0);

$docNew = new \DOMDocument();
$headNew = $docNew->importNode($head, true); 
$docNew->appendChild($headNew);
$bodyNew = $docNew->importNode($body, true); 
$docNew->appendChild($bodyNew);

echo $docNew->saveHTML(); 

【讨论】:

    【解决方案2】:

    你有错字, 你写的CloneNone(true), 应该是cloneNode(true)

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2017-08-15
      • 2016-03-31
      • 2012-12-02
      • 2014-04-26
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多