【问题标题】:Strict xml validation in phpphp中严格的xml验证
【发布时间】:2012-12-25 10:10:58
【问题描述】:

我正在尝试完全验证用户可能在 完全 发布和上线之前发布的 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>';
    }
}

【问题讨论】:

  • XML“不完全有效”如何?

标签: php xml xslt dtd


【解决方案1】:

使用 DOM 方法:

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

【讨论】:

  • 我正在使用这种确切的方法,但我很确定我遇到了一些问题(可能是与号或编码?),它在没有完全有效/格式正确的情况下发布。还是我弄错了?
【解决方案2】:

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

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

http://php.net/libxml.constants

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多