PHP DOMElement 是不可变的。 =“不允许修改错误”

发布于 2024-11-15 08:49:25 字数 312 浏览 0 评论 0原文

我不明白为什么会失败。 DOMElement 是否需要成为文档的一部分?

$domEl = new DOMElement("Item"); 
$domEl->setAttribute('Something','bla'); 

抛出异常

> Uncaught exception 'DOMException' with message 'No Modification Allowed Error';

我本以为我可以创建一个 DOMElement 并且它是可变的。

I cannot understand why this fails. Does a DOMElement need to be part of a Document?

$domEl = new DOMElement("Item"); 
$domEl->setAttribute('Something','bla'); 

Throws exception

> Uncaught exception 'DOMException' with message 'No Modification Allowed Error';

I would have thought I could just create a DOMElement and it would be mutable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耶耶耶 2024-11-22 08:49:25

来自 http://php.net/manual/en/domelement.construct.php

创建一个新的 DOMElement 对象。 此对象是只读的。它可以附加到文档,但附加节点可能不会附加到该节点,直到该节点与文档关联。要创建可写节点,请使用 DOMDocument::createElementDOMDocument::createElementNS

From http://php.net/manual/en/domelement.construct.php

Creates a new DOMElement object. This object is read only. It may be appended to a document, but additional nodes may not be appended to this node until the node is associated with a document. To create a writeable node, use DOMDocument::createElement or DOMDocument::createElementNS.

后eg是否自 2024-11-22 08:49:25

我需要将 \DOMElement 的一个实例传递给函数才能添加子元素,因此我最终得到了如下代码:

class FooBar
{
    public function buildXml() : string
    {
        $doc = new \DOMDocument();
        $doc->formatOutput = true;

        $parentElement = $doc->createElement('parentElement');
        $this->appendFields($parentElement);

        $doc->appendChild($parentElement);

        return $doc->saveXML();
    }

    protected function appendFields(\DOMElement $parentElement) : void
    {
        // This will throw "No Modification Allowed Error"
        // $el = new \DOMElement('childElement');
        // $el->appendChild(new \DOMCDATASection('someValue'));

        // but these will work
        $el = $parentElement->appendChild(new \DOMElement('childElement1'));
        $el->appendChild(new \DOMCdataSection('someValue1'));

        $el2 = $parentElement->appendChild(new \DOMElement('childElement2'));
        $el2->setAttribute('foo', 'bar');
        $el2->appendChild(new \DOMCdataSection('someValue2'));
    }
}

I needed to pass one instance of \DOMElement to a function in order to add children elements, so I ended up with a code like this:

class FooBar
{
    public function buildXml() : string
    {
        $doc = new \DOMDocument();
        $doc->formatOutput = true;

        $parentElement = $doc->createElement('parentElement');
        $this->appendFields($parentElement);

        $doc->appendChild($parentElement);

        return $doc->saveXML();
    }

    protected function appendFields(\DOMElement $parentElement) : void
    {
        // This will throw "No Modification Allowed Error"
        // $el = new \DOMElement('childElement');
        // $el->appendChild(new \DOMCDATASection('someValue'));

        // but these will work
        $el = $parentElement->appendChild(new \DOMElement('childElement1'));
        $el->appendChild(new \DOMCdataSection('someValue1'));

        $el2 = $parentElement->appendChild(new \DOMElement('childElement2'));
        $el2->setAttribute('foo', 'bar');
        $el2->appendChild(new \DOMCdataSection('someValue2'));
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文