0

私はこれに対する答えをどこでも探しましたが、見つけることができないようです。

XSDファイルに対してXMLファイルを検証しようとしています。私はこれまでこれを書いてきました。

$x_validate = new DOMDocument();
$x_validate->load($xml_path);

$x_validate->schemaValidate($xsd_path);

最初に、パスはリモートの場所に設定されました。次に、これらのリモートファイルを表示するには認証が必要であることに気付きました。したがって、これを回避するために、ファイルを自分のディレクトリにダウンロードして、パスが次のようになるようにしました。

$xml_path = "./test-v1.xml";
$xsd_path = "./test-v1.xsd";

これに関する唯一の問題は、それが機能せず、いくつかのエラーが発生したことです。それらの1つはこれです。セキュリティ上の理由から、URLを空白にしました。

Warning: DOMDocument::schemaValidate() [domdocument.schemavalidate]: Element '{http://www.w3.org/2001/XMLSchema}include': Failed to load the document 'https://****' for inclusion. in C:\Xampp\htdocs\cdes\xml-validation\run-validation.php on line 15

したがって、このエラーのために、URLの元のリモート参照に戻ります。

スキーマを検証する前に、認証ユーザー名とパスワードをXSDおよびXMLファイルに送信する正しい方向を誰かに教えてもらえますか?

ありがとうございました。

4

2 に答える 2

2

インクルードを介して参照されるファイルを含むファイルをローカルハードディスクにダウンロードしてから、いわゆるカタログを使用して、URIの代わりにローカルファイルを自動的に使用する必要があります。

これにより、検証速度も大幅に向上します。私はこの模範を別のQ&A資料で概説しています:

提供したエラー情報を使用して記述した認証の問題については、これの正確な原因と解決方法(カタログの使用を除く)が完全には明確ではありません。ブラウザでファイルをダウンロードできるようになったら、ローカルコピーを探します。ほとんどの場合、XSDファイルのセットをzipパッケージなどでダウンロードすることもできます。

ダウンロードできない場合は、HTTP接続のトラブルシューティングを行う必要があります。これには、ネットワークスニファを使用してリクエストをトレースするか、利用可能な外部ローダーコールバック(を参照libxml_set_external_entity_loader())を使用して独自の処理を挿入する必要があります。 PHP 5.4を使用すると、を介してストリームにコールバックを挿入し、libxml_set_streams_context()で通知を送信することもできますstream_notification_callback()

TLDR:カタログを探してください。

于 2013-03-06T19:32:25.450 に答える
0

これがDOMDocumentクラスでサポートされているかどうかはわかりませんが、通常は次の形式で認証データをURLに追加できます。

http:// username:password@cooldomain.com/bla.xsd

それをXSDパスに追加してみましたか?

于 2013-03-06T16:53:21.727 に答える