PHP - 使用在线DTD文件验证XML

4

我有一个XML文件,希望使用DTD进行验证。

为此,我在XML中包含了DTD链接:

<!DOCTYPE article SYSTEM "http://dtd.nlm.nih.gov/1.1/journalpublishing.dtd">

然后执行:

$dom = new DOMDocument();
$dom->loadHTML($xml);

if ($dom->validate()) {
    echo "This document is valid!\n";exit;
}
else {
    var_dump("Not OK");exit;
}

问题在于我收到了这个警告信息:

Warning: DOMDocument::validate(http://www.w3.org/TR/REC-html40/loose.dtd): failed to open stream: HTTP request failed! HTTP/1.0 500 Server Error

有什么想法吗?谢谢。

1
loadHTML改为load,除非您想触发libxml的HTML解析器模块。 - Gordon
@Gordon,这个方法很管用,非常感谢你。 - Milos Cuculovic
请回答这个问题,并可能提供一些细节,为什么load()起作用,但loadXML()不起作用? - Milos Cuculovic
完成了,实际上我是指 loadXML,而不是 load。也就是说,除非您的 $xml 变量保存的是文件名。 - Gordon
1个回答

1
您正在使用错误的方法加载XML。
请使用 load 加载XML文件或使用 loadXML 加载XML字符串。使用 loadHTMLFile 加载HTML文件和 loadHTML 加载HTML内容。
使用其中一个HTML方法将触发 libxml的HTML解析器模块,它是

一个具有与XML解析器兼容的API的HTML 4.0非验证解析器。即使从规范的角度来看,它也应该能够解析“现实世界”中的HTML,即使严重破坏。

HTML解析器模块将始终使用HTML4 Transitional作为DTD,并使用宽松的错误处理解析文档,并尝试自动纠正一些事情,例如在部分内容中添加HTML骨架等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接