如何在没有DTD的情况下验证xml文件


How to validate xml file w/o DTD

我有一个XML文件要操作,并且正在使用XSLT进行处理。我想在XSLT转换之前首先验证XML文件。这是我的代码:

<?php
$doc = new DOMDocument();
$doc->load('somefile.xml');
$isValid = $doc->validate();
if(!$isValid) {
    echo "$doc is INVALID!";
}else{
$xsldoc = new DOMDocument();
$xsldoc->load('somename.xslt');

$xslt = new XSLTProcessor();
$xslt->importStylesheet($xsldoc);

$result = $xslt->transformToDoc($doc);
$result->save('somefile.xml');
}
?>  

但是在运行这个php文件后,我得到了以下错误:

Warning: DOMDocument::validate(): no DTD found! in C:'test.php on line 10
Catchable fatal error: Object of class DOMDocument could not be converted to string in C:'test.php on line 13

其中我没有任何DTD文件可以验证,那么我现在如何验证呢?

谢谢!

以下是XML文件的两个验证级别。第一个是XML语法本身。符合该规则的XML文档称为"格式良好"。您可以通过加载XML来进行验证。

libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->load($file);
var_dump(libxml_get_errors());

根据您的一般错误处理,这可能会变得更高级。请注意,这里也可能有警告和通知。DOMDocument有一些自动更正。

第二个级别是针对XML格式的特定规则进行验证。只有当您使用DTD、Schema或RelaxNG定义规则时,才能进行此验证。