簡體   English   中英

XML驗證,嵌套的XSD和UNC路徑

[英]XML validation, nested XSD and UNC paths

我想使用PHP / 5.3.0上的XMLReader針對本地XSD文件驗證XML文檔。 該模式稱為test.xsd ,其中包含對第二個模式的引用:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:include schemaLocation="common.xsd"/>

我在同一目錄中有所有文件的副本。 代碼的相關部分如下所示:

<?php

define('DIR_XML', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'samples' . DIRECTORY_SEPARATOR);

$oXMLReader = new XMLReader;

$oXMLReader->open('test.xml');
$oXMLReader->setSchema(DIR_XML . 'test.xsd');

while( $oXMLReader->read() ){
}
$oXMLReader->close();

?>

如果samples目錄在Web服務器本地並且可以通過驅動器號訪問,則我的代碼運行良好 ,例如:

define('DIR_XML', 'C:\samples' . DIRECTORY_SEPARATOR);

但是,實際數據位於UNC路徑可訪問的網絡驅動器中:

\\SERVER\WEB PROJECTS\foo\samples

這就是問題所在:在這種情況下(並且僅在這種情況下),PHP可以很好地加載test.xsd ,但找不到common.xsd 我收到警告:

警告:XMLReader :: setSchema()[xmlreader.setschema]:無法設置架構。 必須在讀取之前設置此設置,否則架構包含錯誤。

...以及以下XML錯誤:

警告1549(開始元素):無法加載外部實體“ /SERVER/WEB%20PROJECTS/foo/samples/common.xsd”

錯誤3050(開始元素):元素'{http://www.w3.org/2001/XMLSchema}include':無法加載包含的文檔'/SERVER/WEB%20PROJECTS/foo/samples/common.xsd' 。

似乎PHP會將UNC路徑誤解為URL:-?

是否有任何解決方案?

我遇到了類似的問題,而我能解決的唯一方法是使用從本地HDD到UNC路徑(Windows)的符號鏈接: mklink /D "C:\\SomeDir" "//Some//UNC//Path"

會以為這也可以在linux上工作

如果不查看存儲\\\\SERVER\\WEB PROJECTS\\foo\\sample的字符串的樣子,很難回答。 這可能是導致轉義的原因,因為\\\\產生\\ ,而\\\\\\\\則需要產生\\\\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM