如何验证没有DTD的xml文件

时间:2013-11-25 08:56:51

标签: php

我有一个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文件,那么我现在可以如何验证?

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

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