我正在为一个大型XML文件制作模式文件,其中XSD文件正在使用许多其他模式文件,这些文件包含在其他次要模式文件中。每次我试图验证它时,都会说它无法找到元素的架构信息。
我尝试添加targetNamespaces
或使用import
,但它不断出现错误。 Config XSD文件包含所有其他较小的模式文件,没有任何问题。
<Config xmlns="C:\Users\xs\Desktop\Config.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="C:\Users\xs\Desktop\Config.xsd">
<test>
<test2>
<TestDatabase Key="no">
<Class>blablabla</Class>
</TestDatabase>
<TestTimetable Key="no">
<Class>blablabla</Class>
<Report>
<Component>1</Component>
<Connection>1</Connection>
</Report>
<Connect>
<Delay>15</Delay>
<Period>30</Period>
</Connect>
<Abc>
<Factory>jk</Factory>
<Url>www.jk.com</Url>
<Topic>a</Topic>
<Queue>1</Queue>
<User>p1</User>
<Password>xxx</Password>
</Abc>
</TestTimetable>
</test2>
</test>
</Config>
Config XML文件的模式文件:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="file:///C:\Users\xs\Desktop\TestDatabase.xsd" />
<xs:include schemaLocation="file:///C:\Users\xs\Desktop\TestTimetable.xsd" />
<xs:element name="Config">
<xs:complexType>
<xs:sequence>
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Test2">
<xs:complexType>
<xs:sequence>
<xs:element name="TestDatabase" type="TestDatabaseType" />
<xs:element name="TestTimetable" type="TestTimetableType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
TestTimetableType
有自己的包含来自Report
和Connect
等模式。
答案 0 :(得分:0)
看起来你想要在没有命名空间的情况下这样做......
(1)在XML文件中删除此行:
xmlns="C:\Users\xs\Desktop\Config.xsd"
(2)在XML文件中更改此行:
xsi:schemaLocation="C:\Users\xs\Desktop\Config.xsd">
到此:
xsi:noNamespaceSchemaLocation="file:///C:\Users\xs\Desktop\Config.xsd">
<强>解释强>
xsi:schemaLocation
属性适用于拥有命名空间的情况。它需要
namespace-URI 对 ;使用xsi:noNamespaceSchemaLocation
指定没有命名空间的XSD。file:///
。另请注意,XML区分大小写,因此test
与Test
等不同。