【发布时间】:2015-03-15 17:01:17
【问题描述】:
假设我想将一个 div 附加到一个 DOMDocument。我可以这样做:
<?php
$dom = new DOMDocument();
$dom->appendChild(
$dom->createElement("div")
);
现在,假设我想向该 div 添加一些文本,所以我尝试:
<?php
$dom = new DOMDocument();
$dom->appendChild(
$dom->createElement("div")
->appendChild( $dom->createTextNode("foobar") )
);
但是等等!现在有问题了!
在第一种情况下,$dom->createElement("div") 返回了一个空的“div”DOMNode,appendChild() 可以毫无问题地接受它。
但在第二种情况下,$dom->createElement("div")->appendChild($dom->createTextNode("foobar")) 返回已附加“foobar”DOMText。所以“div” DOMNode 不会被附加,php 会抛出一个警告。
Warning: DOMNode::appendChild(): Couldn't fetch DOMText
我的问题是,有没有办法让方法链返回由 createElement() 返回的原始修改(附加 DOMText)DOMNode?p>
我知道我可以将 DOMNode 保存到一个变量中,然后将它传递给 appendChild(),但我真的很想看到一个单一的解决方案。
谢谢。
【问题讨论】:
-
你可以使用
$dom->createElement('div', 'foobar'); -
不完全一样,但是
createElement('div', 'foobar')会用给定的文本创建一个元素。 -
或使用
html_entities() -
@Nikita240 这有什么问题?输出看起来正确。
-
@Nikita240 据我所知没有。
DOMNode::appendChild()返回添加的节点,因此您可以使用额外的变量并使用DomDocument::createTextNode(),或者使用带有htmlentities()的单行器。
标签: php domdocument php-5.5