我有这个班级
Class Parser extends DOMDocument {
public function setHTML($file) {
$this->loadHTMLFile($file);
}
public function setAttribute($name, $value) {
return $this->setAttribute($name, $value);
}
public function findById($id) {
return $this->getElementById($id);
}
}
我这样用它:
$parser = new Parser();
$parser->setHTML('as.html');
$parser->findById("xaxa")->setAttribute('name1', 'value1');
但如果我必须看到更改后的HTML,我会像这样调用SAVEHTML
echo $parser->saveHTML();
有没有办法让它自动化?就像调用方法setAttribute来制作
时一样$this->saveHTML()
自动所以我会有这个
$html =$parser->findById("xaxa")->setAttribute('name1', 'value1');
然后致电
echo $html;
非常感谢
答案 0 :(得分:2)
好吧,DOM对象不能(直接)用作字符串,当你尝试使用echo时会抛出异常
Catchable fatal error: Object of class DOMDocument could not be converted to string in ...
saveHTML方法明确设计为将节点作为HTML字符串返回 - 而不是回显它。请记住,在调用setAttribute方法之后,实际上节点已经更新(保存!) - saveHTML仅用于呈现 a来自节点的html字符串。
提供我理解你的概念,你仍然认为你想要它的方式,也许你可以尝试下面的解决方案 - 但只是为了记录,我没有测试代码。
Class Parser extends DOMDocument
{
public function setHTML($file)
{
$this->loadHTMLFile($file);
}
public function setAttribute($name, $value)
{
return $this->setAttribute($name, $value);
}
public function findById($id)
{
return $this->getElementById($id);
}
public function __toString()
{
return $this->saveHTML();
}
}
// and now this should work
$parser = new Parser();
$parser->setHTML('as.html');
$parser->findById("xaxa")->setAttribute('name1', 'value1');
echo $parser;