1

XSDファイルに対してXMLを検証し、エラーがある場合はエラーを取得したいと思います。

DOMで使用すると正常に動作しますが、XMLReaderでは動作しません。知っている限り、どちらもlibxmlライブラリを使用しているので、XMLReaderに使用しようとしましたが、うまくいきませんでした。

ありがとう

DOM(正常に動作します)

libxml_use_internal_errors(true);

if (! $xml->schemaValidate($xsd_file))
{
    get_errors();
    exit;
}

function get_errors()
{
    $messages   = null;
    $errors     = libxml_get_errors();

    foreach ($errors as $error)
    {
        switch ($error->level)
        {
            case LIBXML_ERR_ERROR:
                $messages .= 'Error ' . $error->code . $error->message;
                break;

            case LIBXML_ERR_WARNING:
                $messages .= 'Warning ' . $error->code . $error->message;
                break;

            case LIBXML_ERR_FATAL:
                $messages .= 'Fatal ' . $error->code . $error->message;
                break;
        }

        echo $messages .= ($error->file) ? $error->file : $error->line;
    }
}

XMLREADER(上記の同じエラー関数では機能しません)

libxml_use_internal_errors(true);

//This returns true all times whether XML has faults or not
if (! $reader->setSchema($xsd_file))
{
   //This echos nothing whether XML has faults or not
   get_errors();
}
4

1 に答える 1

0

スキーマを設定した後、read()またはisValid()が実行されていないので、どのようにしてエラーを取得しますか?ドキュメント(私はPHPを想定しています)を見てください、それはあなたがアイデアを得るのを助けるはずです。

于 2012-07-27T19:00:59.277 に答える