0

我正在使用 simplexml_load_file 来解析必须遵循 DTD 的 XML 文件。XML 和 DTD 都是本地文件。

    $obj_xml = simplexml_load_file(
        $str_xml_file,
        'SimpleXMLElement',
        LIBXML_DTDVALID + LIBXML_NOENT
    );
    if (false === $obj_xml) {
        throw new Exception("XML file is not valid");
    }

XML文件是这样的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping SYSTEM 'mapping.dtd' [
<!ENTITY data_file "data.csv">
]>
<mapping>
...
</mapping>

我的印象是,如果 XML 根据指定的 DTD 无效,那么 simplexml_load_file 将返回 false,但事实并非如此。我还尝试检查 $obj_xml 是否是 LibXMLError 类的实例,但结果相同。

似乎 simplexml_load_file 完全忽略了 DTD。我尝试将其名称更改为不存在的名称,但仍然没有错误。

正如我所说,XML 和 DTD 都是本地文件。$str_xml_file 是 XML 文件的绝对完整路径名,DTD 位于同一目录中。

4

1 回答 1

0

我在网上看到的文档中没有任何内容表明simplexml_load_file执行验证。事实上,我在 SimpleXML 文档中看不到任何东西表明它可以验证 XML。

[共识[(http://www.ibm.com/developerworks/xml/library/x-simplexml/index.html)似乎是SimpleXML没有验证工具;IBM DeveloperWorks 有一篇文章建议您需要使用 DOM 接口进行验证。

于 2012-09-13T22:20:00.063 回答