我必须使用 xsd 文件验证 xml。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:CC="http://test.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="companyType.xsd"/>
<xs:element name="companySendType" >
<xs:complexType>
...
</xs:complexType>
</xs:element>
</xs:schema>
Java代码:
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new Source[]{
new StreamSource(ClassLoader.getSystemClassLoader().getResourceAsStream("companyType.xsd")),
new StreamSource(ClassLoader.getSystemClassLoader().getResourceAsStream("companySendType.xsd"))
});
Validator validator = schema.newValidator();
StringReader stringReader = new StringReader(xmlToValidate);
StreamSource streamSource = new StreamSource(stringReader);
validator.validate(streamSource);
我得到的错误是: 找不到元素“CC:companySendType”的声明
xml 是:
<?xml version="1.0" encoding="UTF-8"?>
<CC:companySendType version="1.0" xsi:schemaLocation="http://test.com companySendTypev1.18.xsd" xmlns:CC="http://test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</CC:companySendType>
我不明白为什么它不起作用,xml文件似乎没问题。
我检查了你的xsd,看来你还没有声明元素的类型
CC:companySendType
。您可以使用一些默认类型,例如:
<xs:element name="companySendType" type="xs:string"/>
或者如果您有一个复杂类型,您应该像下面的示例一样定义它:
<xs:element name="companySendType">
<xs:complexType>
<xs:sequence>
<xs:element name="x1" type="xs:string"/>
<xs:element name="x2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>