java - 错误 : Invalid content was found starting with element 'X' . 应为 '{X}' 之一

标签 java xml xsd

我正在尝试使用简单的 XSD 验证简单的 XML,但总是出现此错误:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'linux'. One of '{linux}' is expected.

为什么?找到标签“linux”,它是 {linux} 之一!

java代码:

public static void main(String[] args) {
    try {
        InputStream xml = new FileInputStream("data/test.xml");
        InputStream xsd = new FileInputStream("data/test.xsd");

        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(new StreamSource(xsd));

        Validator validator = schema.newValidator();
        validator.validate(new StreamSource(xml));

        log.info("OK!");
    } catch (Exception e) {
        log.error(":(");
        log.error(e.getMessage());
    }
}

数据/测试.xml:

<?xml version="1.0" encoding="utf-8"?>
<so xmlns="http://test/">
    <linux>
        <debian>true</debian>
        <fedora>true</fedora>
    </linux>
</so>

数据/测试.xsd

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="http://test/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="so">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="linux">
                    <xs:complexType>
                        <xs:sequence minOccurs="1" maxOccurs="unbounded">
                            <xs:any processContents="lax" maxOccurs="unbounded"/>
                        </xs:sequence></xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

最佳答案

因为模式没有指定 elementFormDefault="qualified",元素“linux”的本地元素声明是在没有命名空间中声明一个元素,但是实例在命名空间中有一个 linux 元素 “http://test/”。错误消息令人困惑,因为它未能明确指出问题出在命名空间上。

关于java - 错误 : Invalid content was found starting with element 'X' . 应为 '{X}' 之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462941/

相关文章:

c# - 通过 id linq to xml C# 选择一个对象

java - 防止从没有命名空间的 XSD 生成重复类

xml - 如何定义允许未知(通配符)元素的 XSD 文件?

java - 在java中使用正则表达式无法从简历中获取电子邮件ID

java - 客户端/服务器,异常 : StreamCorruptedException: invalid stream header: 75720002

c# - 创建新的 XML 元素

文件路径的 XML 架构数据类型

java - 生成一个空的 zip 文件 java

java - 我如何通过将鼠标悬停在标签上来获取 JLabel 的文本(带有图标)来解释标签是什么?

java - 如何禁用 XMLUnit DTD 验证?