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>

指定されたDTDに従ってXMLが有効でない場合、simplexml_load_fileはfalseを返しますが、そうではないという印象を受けました。$ obj_xmlがLibXMLErrorクラスのインスタンスであるかどうかも確認しようとしましたが、同じ結果になりました。

Simplexml_load_fileではDTDが完全に無視されているようです。名前を変更してみましたが、まだエラーはありません。

私が言ったように、XMLとDTDはどちらもローカルファイルです。$ str_xml_fileはXMLファイルの絶対絶対パス名であり、DTDは同じディレクトリにあります。

4

1 に答える 1

0

私が Web で見たドキュメントには、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 に答える