我有一个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
有什么想法吗?谢谢。
答案 0 :(得分:1)
您使用错误的方法加载XML。
使用load
加载XML文件或loadXML加载XML字符串。使用loadHTMLFile加载HTML文件,使用loadHTML加载HTML内容。
使用其中一种HTML方法会触发libxml's HTML parser module,即
HTML 4.0非验证解析器,其API与XML解析器兼容。它应该能够解析“真实世界”的HTML,即使从规范的角度严重破坏。
HTML Parser模块将始终使用HTML4 Transitional作为DTD,并使用宽松的错误处理解析文档并尝试自动更正内容,例如,通过向部分内容添加HTML骨架等。