XSD文件有密码

时间:2013-03-06 16:46:07

标签: php xml web-services soap xsd

我到处寻找答案,但似乎找不到答案。

我正在尝试针对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";

唯一的问题是它没有用,我遇到了一些错误。其中一个就是这个。出于安全考虑,我将网址空白了。

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文件吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您应该将文件下载到本地硬盘,包括通过包含引用的文件,然后使用所谓的目录自动使用本地文件而不是URI。

这也将大大提高验证速度。我在不同的Q& A材料中概述了这个示例:

对于您使用所提供的错误信息编写的身份验证问题,并不完全清楚这究竟是什么原因以及如何解决它(除了使用目录)。当您能够使用浏览器下载文件时,请转到本地副本。大多数情况下,您也可以使用zip包或类似方式下载一组XSD文件。

如果您无法下载,那么您需要对HTTP连接进行故障排除,这需要您使用网络嗅探器跟踪请求,或者使用外部加载器回调注入您自己的处理(请参阅{ {3}})可以使用PHP 5.4,也可以通过libxml_set_external_entity_loader()libxml_set_streams_context()上的通知将回调注入流中。

TLDR:寻找目录。

答案 1 :(得分:0)

不确定DOMDocument类是否支持它,但您通常可以使用以下格式将身份验证数据添加到URL:

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

您是否尝试将其添加到XSD路径?