2013-03-06 66 views
0

我到處搜索了一個答案,但似乎無法找到一個。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"; 

唯一的問題是,它沒有工作,我得到了一些錯誤。其中之一就是這個。出於安全目的,我清空了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文件嗎?

謝謝。

回答

2

您應該將文件下載到本地硬盤,包括那些通過包含引用的文件,然後使用所謂的目錄自動使用本地文件而不是URI。

這也將大大提高驗證速度。我有這個示範性的不同的Q &所列的材料:

爲你寫的與錯誤信息的身份驗證問題您提供它不是完全清楚究竟是什麼原因導致這種如何解決它(除了使用目錄)。當您可以使用瀏覽器下載文件時,請使用本地副本。大多數情況下,您可以下載一組XSD文件以及zip包或類似文件。

如果您無法管理下載,則需要排除HTTP連接的故障,這需要您使用網絡嗅探器來跟蹤請求,或者使用外部加載器回調注入您自己的處理(請參閱libxml_set_external_entity_loader()),它可以在PHP 5.4中使用,也可以通過libxml_set_streams_context()stream_notification_callback()上的通知將回調注入流中。

TLDR:去目錄。

+0

非常感謝。我採取了我原來的計劃,只是在本地下載文件。我還遇到了另一個編碼問題,所以我不得不將其更改爲ISO-8859-1,但現在它已經完全驗證了。 – 2013-03-06 21:21:35

0

,如果這是由DOMDocument類支持的不知道,但你可以驗證數據通常添加到URL格式爲:

http://username:[email protected]/bla.xsd

你試過並稱到的XSD路徑?

+0

您好,感謝您的快速回復。我試着用你提供的格式輸入用戶名和密碼,但它似乎沒有工作。 該域也有一個子域,並使用HTTPS。這會影響認證嗎? – 2013-03-06 16:56:21

+0

好吧,我現在已經使用您建議的URL更改加載了第一個XSD文件。我現在有另一個問題。由於XSD文件具有其他XSD包含,並且還需要身份驗證。因爲我不能用用戶名和密碼編輯代碼行,所以會引發驗證錯誤。 警告:DOMDocument :: schemaValidate(https:// ****/cdes/services/cdes2_ws?xsd = CDEX_ISO_languages.xsd)[domdocument.schemavalidate]:無法打開流:HTTP請求失敗! HTTP/1.1 401第16行的C:\ Xampp \ htdocs \ cdes \ xml-validation \ run-validation.php中需要授權 – 2013-03-06 17:21:05

+0

嗯,我一直在運行一些測試,通過https設置HTTP驗證。身份驗證似乎不起作用。再次想到,將用戶名放入應該是HTTPS的URL中並不是很「安全」。儘管可以通過HTTP工作。 – grobmotoriker 2013-03-06 17:29:29