[英]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.