如何正确引用本地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中工作,请执行以下操作
- 将WSDL文件和XSD文件放在同一个文件夹中 。
-
正确的WSDL文件,像这样YourSchemeFile.xsd
-
使用Visual Studio使用这个很好的示例如何仅使用物理wsdl文件生成服务引用
请注意,您必须手动将path放到WSDL文件中。 那里没有办法使用打开文件对话框。