XML 架构验证无法找到带有 xsd 的声明

问题描述 投票:0回答:1

我必须使用 xsd 文件验证 xml。

  • xsd 文件 companySendType.xsd 是:
<?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文件似乎没问题。

java xml xsd xsd-validation
1个回答
0
投票

我检查了你的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>
© www.soinside.com 2019 - 2024. All rights reserved.