gpt4 book ai didi

php - 如何扩展 PHP DOMElement?

转载 作者:行者123 更新时间:2023-12-04 06:54:53 28 4
gpt4 key购买 nike

一个.php

#!/usr/bin/php
<?php
class HtmlTable extends DOMElement
{
public function __construct($height, $width)
{
parent::__construct("table");
for ($i = 0; $i < $height; ++$i) {
$row = $this->appendChild(new DOMElement("tr"));
for($j = 0; $j < $width; ++$j) {
$row->appendChild(new DOMElement("td"));
}
}
}
}

$document = new DOMDocument("1.0", "UTF-8");
$document->registerNodeClass("DOMElement", "HtmlTable");
$document->appendChild(new HtmlTable(3, 2));
$document->saveXML();

运行它得到
Fatal error: Uncaught exception 'DOMException' with message 'No Modification Allowed Error' in /home/www/a.php:9
Stack trace:
#0 /home/www/a.php(9): DOMNode->appendChild(Object(DOMElement))
#1 /home/www/a.php(19): HtmlTable->__construct(3, 2)
#2 {main}
thrown in /home/www/a.php on line 9

最佳答案

php.net comment 复制和粘贴

After searching how to extend the DOMDocument and DOMElement I found a way in the bug: http://bugs.php.net/bug.php?id=35104. The following code shows how:


<?php
class extDOMDocument extends DOMDocument {
public function createElement($name, $value=null) {
$orphan = new extDOMElement($name, $value); // new sub-class object
$docFragment = $this->createDocumentFragment(); // lightweight container maintains "ownerDocument"
$docFragment->appendChild($orphan); // attach
$ret = $docFragment->removeChild($orphan); // remove
return $ret; // ownerDocument set; won't be destroyed on method exit
}
// .. more class definition
}

class extDOMElement extends DOMElement {
function __construct($name, $value='', $namespaceURI=null) {
parent::__construct($name, $value, $namespaceURI);
}
// ... more class definition here
}

$doc = new extDOMDocument('test');
$el = $doc->createElement('tagname');
$el->setAttribute("attr", "val");
$doc->appendChild($el);

// append discards the DOMDocumentFragment and just adds its child nodes, but ownerDocument is maintained.
echo get_class($el)."<br/>";
echo get_class($doc->documentElement)."<br/>";
echo "<xmp>".$doc->saveXML()."</xmp>";
?>

关于php - 如何扩展 PHP DOMElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672354/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com