使用php xml解析器进行未声明的实体警告

时间:2013-04-06 21:34:39

标签: xml parsing entity

我已经阅读了几个涉及未申报实体的问题。 我的问题有点不同。 我正在按照这个程序,从网上刮下各种页面。 1.首先在文件上运行php tidy函数。 2.然后从中创建一个dom文档,并使用xpath获取某些节点的值。(table,para和blockquotes)

我的问题很简单:

1.Warning:DOMDocument :: loadHTML():ID hp.global.servicebox.links.arztsuche已在实体中定义,行:2112

2.XML错误:第2679行未声明的实体警告

我意识到第一个警告,可能是因为我首先通过整洁的功能,然后接下来加载HTML。

但第二个问题真的很麻烦。它只是拒绝产生任何输出,我放松了一切。

在这个网站上阅读,发现一个未申报的实体,应该事先宣布,但你会意识到,鉴于我的任务的性质,这是不可能的(我正在为上帝的缘故抓网)

我启用了

var_dump(libxml_use_internal_errors(true));

但是,除了它不会使我的终端混乱之外,它根本没有帮助。对于初学者来说,没有关于如何处理此错误或任何错误的文档。

我意识到这可能不是第一次有人遇到这个问题,我确信解决方案就在那里,我似乎无法找到它。 成千上万的人警告你不要使用正则表达式来解析html或xml,但很少有解决方案解决我们面对解析器的问题 - 就像我面对的那样。

干杯, 理查德, - 一个心怀不满的HTML解析器afficonado。

编辑: 一些额外的信息 - >这是我正在使用的整洁功能。

function cleaning($what_to_clean, $tidy_config='' ) 

{

$config = array
(
    'show-body-only' => false,
    'clean' => true,
    'char-encoding' => 'utf8',
    'add-xml-decl' => true,
    'add-xml-space' => true,
    'output-html' => false,
    'output-xml' => false,
    'output-xhtml' => true,
    'numeric-entities' => false,
    'ascii-chars' => false,
    'doctype' => 'strict',
    'bare' => true,
    'fix-uri' => true,
    'indent' => true,
    'indent-spaces' => 4,
    'tab-size' => 4,
    'wrap-attributes' => true,
    'wrap' => 0,
    'indent-attributes' => true,
    'join-classes' => false,
    'join-styles' => false,
    'enclose-block-text' => true,
    'fix-bad-comments' => true,
    'fix-backslash' => true,
    'replace-color' => false,
    'wrap-asp' => false,
    'wrap-jste' => false,
    'wrap-php' => false,
    'write-back' => true,
    'drop-proprietary-attributes' => false,
    'hide-comments' => false,
    'hide-endtags' => false,
    'literal-attributes' => false,
    'drop-empty-paras' => false,///dont drop empty paras
    'enclose-text' => true,
    'quote-ampersand' => true,
    'quote-marks' => false,
    'quote-nbsp' => true,
    'vertical-space' => true,
    'wrap-script-literals' => false,
    'tidy-mark' => false,
    'merge-divs' => false,
    'repeated-attributes' => 'keep-last',
    'break-before-br' => false,///dont add line breaks before breakes
);

if( $tidy_config == '' ) 
{
    $tidy_config = &$config;
}

$tidy = new tidy();
$out = $tidy->repairString($what_to_clean, $tidy_config, 'UTF8');
unset($tidy);
unset($tidy_config);
return($out);

}

0 个答案:

没有答案