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";

唯一的问题是它不起作用并且我遇到了一些错误。其中之一就是这个。出于安全目的,我将 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。

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

对于您使用提供的错误信息所写的身份验证问题,尚不清楚究竟是什么原因以及如何解决它(除了使用目录)。当您能够使用浏览器下载文件时,请前往本地副本。大多数情况下,您也可以下载一组 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 回答