我想在PHP/5.3.0上使用XMLReader针对本地XSD文件验证XML文档。该模式被称为test.xsd
,它包含第二模式的参考:XML验证,嵌套XSD和UNC路径
<?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 /富/包含samples/common.xsd' 。
看来,PHP是曲解UNC路径作为一个URL: - ?
有没有任何选择或技巧来解决这个问题?
我最终感到厌倦,只是将所有重要的网络路径都链接起来。有太多的应用程序不支持UNC。 – 2016-08-18 06:09:36