如何正确引用本地XML模式文件?

我遇到这个问题,在XML文件中引用我的XML模式。

我有我的XSD在这个path:

C:\environment\workspace\maven-ws\ProjectXmlSchema\email.xsd 

但是,当我在我的XML文件,我试图find像这样的架构,找不到XSD:

 <?xml version="1.0" encoding="UTF-8" ?> <email xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com file://C://environment//workspace//maven-ws//ProjextXmlSchema//email.xsd"> 

findXSD的唯一方法是在同一个文件夹中:

  xsi:schemaLocation="http://www.w3schools.com email.xsd" 

所以问题是这样的: 如果XML文件与XSD文件不在同一个文件夹中,path如何查找以便findXSD?

顺便说一句,我一直使用的例子是从MSDN :他们声称它应该按照我试图的方式工作。 但事实并非如此。

xsi:schemaLocation的值中添加file://之后的斜杠。 (你有两个;你需要三个;认为protocol://host/path ,其中protocol'file'host在这里是空的,在一行中产生三个斜线。)你也可以消除沿path的双斜线。 我相信双斜线可以帮助文件系统,允许在文件和目录名称中使用空格,但是明智地避免了path命名中的复杂性。

 xsi:schemaLocation="http://www.w3schools.com file:///C:/environment/workspace/maven-ws/ProjextXmlSchema/email.xsd" 

还是行不通? 我build议您仔细复制XSD的完整文件规范到Chrome或Firefox的地址栏中

file:///C:/environment/workspace/maven-ws/ProjextXmlSchema/email.xsd

如果XSD 显示在浏览器中 ,则删除path的最后一个组件(email.xsd),看看是否不能显示父目录。 以这种方式继续,直到findpath与本地文件系统的现实不同的地方。

如果XSD 确实显示在浏览器中 ,请说明您正在使用的XML处理器,并准备好听到它已经损坏,或者您必须解决某些限制。 我可以告诉你,上述修复将与我的基于Xerces-J的validation器一起工作。

也许可以帮助检查xsd文件的path没有像“é”这样的“奇怪”字符,或类似的:我有同样的问题,但是当我改变到没有“é”的path时,错误消失。

如果您在MS Visual Studio中工作,请执行以下操作

  1. 将WSDL文件和XSD文件放在同一个文件夹中
  2. 正确的WSDL文件,像这样YourSchemeFile.xsd

  3. 使用Visual Studio使用这个很好的示例如何仅使用物理wsdl文件生成服务引用

请注意,您必须手动将path放到WSDL文件中。 那里没有办法使用打开文件对话框。