我到处寻找答案,但似乎找不到答案。
我正在尝试针对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文件吗?
谢谢。
答案 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路径?