将xml DOMDocument转换为HTML字符串和echo

时间:2013-11-23 10:22:42

标签: php html parsing domdocument

我有这个班级

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; 

非常感谢

1 个答案:

答案 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;