我到处寻找这个问题的答案,但似乎找不到一个。
我正在尝试根据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";唯一的问题是它不工作,我得到了一些错误。其中之一就是这个。出于安全考虑,我把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文件的正确方向吗?
谢谢。
发布于 2013-03-07 03:32:25
您应该将文件下载到本地硬盘,包括通过includes引用的文件,然后使用所谓的Catalog自动使用本地文件而不是URI。
这也将极大地提高验证速度。我在一个不同的问答材料中概述了这个范例:
对于您使用所提供的错误信息编写的身份验证问题,并不完全清楚究竟是什么导致了这个问题,以及如何解决它(除了使用编目之外)。当您能够使用浏览器下载这些文件时,请转到本地副本。大多数情况下,您也可以在zip包或类似文件中下载一组XSD文件。
如果您无法设法下载,那么您将需要排除HTTP连接的故障,这需要您使用网络嗅探器跟踪请求,或者您使用PHP5.4提供的外部加载器回调(参见libxml_set_external_entity_loader())注入您自己的处理,还可以通过libxml_set_streams_context()和stream_notification_callback()上的通知将回调注入到流中。
TLDR:查找目录。
发布于 2013-03-07 00:53:22
不确定DOMDocument类是否支持这种方式,但通常可以使用以下格式将身份验证数据添加到URL:
http://username:password@cooldomain.com/bla.xsd
您是否尝试过将其添加到XSD路径中?
https://stackoverflow.com/questions/15253176
复制相似问题