PHP - 根据在线DTD文件验证XML

时间:2014-02-17 16:35:46

标签: php dom domdocument dtd xml-validation

我有一个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 个答案:

答案 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骨架等。