这是一个示例php代码,用于创建dom并保存html。
$doc = new DOMDocument('1.0');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
echo $doc->saveHTML();
如何在保存或保存HTML()失败时捕获?
我感谢任何帮助。
更新:
我希望在以下代码中捕获错误。我故意构造一个随机字符串。我想将此字符串加载到dom文档并捕获错误。
<?php
$str = "uyiuyiuhkjh<><><.,><.<.";
$dom = new DOMDocument;
$dom->loadHTML($str);
$saved = $dom->saveHTML();
//This doesnt work.
if ($saved === false){
echo 'Unable to save DOM document';
}
else{
echo $saved;
}
?>
更新2:
以下代码将失败。即解析时它不识别导航标签。它在实体中给出错误标记导航无效。
<?php
$str = "<html> <head> </head> <body> <nav> </nav> </body> </html>";
$dom = new DOMDocument;
$dom->loadHTML($str);
$saved = $dom->saveHTML();
if ($saved === false){
echo 'Unable to save DOM document';
}
else{
echo $saved;
}
?>
现在,为了抑制错误我可以使用libxml_use_internal_errors(true);但现在错误消息消失但$ dom-&gt; saveHTML()仍然没有返回false或空,因此很难知道saveHTML或loadHTML何时出错。请帮忙!!
答案 0 :(得分:1)
我建议阅读DOMDocument :: saveHTML上的PHP documentation page。
当DOMDocument :: saveHTML失败时,它将返回false。如果您想要禁用libxml错误并自行获取它们,请考虑使用libxml_use_internal_errors。
<?php
libxml_use_internal_errors(true);
$doc = new DOMDocument('1.0');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
$saved = $doc->saveHTML();
if ($saved === false) {
echo 'Unable to save DOM document';
} else {
echo $saved;
}
要获取使用libxml错误时可能发生的任何错误,请使用libxml_get_errors:
if ($errors = libxml_get_errors()) {
foreach ($errors as $error) {
echo $error->message . PHP_EOL;
}
}
如果您不关心任何错误消息,可以使用libxml_get_last_error如果发生错误将返回LibXMLError对象,否则返回false。