2014-02-17 45 views
3

我有一個xml文件,我想用DTD驗證它。PHP - 根據在線DTD文件驗證XML

對於這一點,我包含在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

+0

@Gordon,那真是太誘人了,非常感謝。 –

+0

你能回答這個問題,也許提供一些細節爲什麼加載工作,而不是loadXML? –

回答

1

您正在使用錯誤的方法來加載XML。

使用load加載XML文件或loadXML加載XML字符串。使用loadHTMLFile加載HTML文件並使用loadHTML加載HTML內容。

使用的HTML方法之一將觸發libxml's HTML parser module,這是

的HTML 4.0非驗證與API與XML解析器那些兼容解析器。它應該能夠解析「真實世界」的HTML,即使從規範的角度來看嚴重破壞。

HTML解析器模塊將始終使用HTML4過渡的DTD,以及解析與寬鬆的錯誤處理文檔,並試圖自動正確的東西,比如,通過添加HTML骨架諧音等