2014-02-17 6 views
3

У меня есть xml-файл, и я хотел бы проверить его с помощью DTD.PHP - проверка XML-файла в отношении DTD-файла

Для этого я включил ссылку DTD в XML:

<!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', если вы не хотите вызывать модуль парсера HTML-кода для libxml – Gordon

+0

@Gordon, это очень трюк, спасибо большое. –

+0

Не могли бы вы ответить на вопрос и, возможно, предоставить некоторые детали, почему загрузка работает, а не loadXML? –

ответ

1

Вы используете неправильный метод для загрузки XML.

Чтобы загрузить XML-файл, загрузите файл XML или loadXMLload. Используйте loadHTMLFile для загрузки HTML-файла и loadHTML для загрузки содержимого HTML.

С помощью одного из методов HTML вызовет libxml's HTML parser module, что

HTML-4,0 без проверки синтаксический анализатор с API, совместимый с XML парсер из них. Он должен иметь возможность анализировать «реальный мир» HTML, даже если он сильно нарушен с точки зрения спецификации.

Модуль HTML Parser всегда будет использовать HTML4 переходному как DTD, а также анализ документа с мягкой обработкой ошибок и пытаемся Автоисправить вещи, например, путь добавления HTML скелета к частичным и т.д.

 Смежные вопросы

  • Нет связанных вопросов^_^