在php中严格的xml验证

时间:2009-08-14 03:47:43

标签: php xml xslt dtd

我正在尝试完全验证用户在完全发布和生存之前发布的xml文件 - 它基本上有点像sitemap.xml,它绝对无法发布没有防错(是的,我也有自己的自定义dtd)。

我还在考虑实现一个存储系统,以便存储说明,最后2-3个版本只是因为它是一个真正的高优先级类型的东西。

任何提示?

编辑:这是我目前所拥有的,但在某些情况下,我相信它在xml不完全有效时已经过验证:

$dom = new DOMDocument();
if ( $dom->load( $tempFileName ) ) {
    if ( $dom->validate() ) {
    echo '<p>XML is valid. Overwriting sitemap.xml.</p>';
    file_put_contents( 'sitemap.xml', $sitemapXML->asXML() );
    } else {
    echo '<p>XML is not valid. Please correct.</p>';
    }
}

2 个答案:

答案 0 :(得分:2)

使用DOM方法:

$doc = new DOMDocument();
$doc->load($xmlPath);
if (!$doc->validate()) {
    die("OH NOES!");
    // ... or perform your own restore-to-a-backup procedure.
}

答案 1 :(得分:1)

您可以“告诉”libxml加载dtd并在加载xml文档时立即对其进行验证。

$doc->load( $tempFileName, LIBXML_DTDLOAD|LIBXML_DTDVALID )

请参阅http://php.net/libxml.constants