Xml XSD模式命名空间问题——cvc复杂类型.2.4.a

Xml XSD模式命名空间问题——cvc复杂类型.2.4.a,xml,parsing,jaxb,xsd,Xml,Parsing,Jaxb,Xsd,我试图读取XML文件,但他不断抛出以下错误: cvc复杂类型.2.4.a:发现以开头的内容无效 元素“contact”。应为“{contact}”之一 行号:2;栏目编号:68;cvc elt.1:找不到 元素“联系人”的声明。] 我在网上搜寻答案。如果我删除我的targetNamespace,那么它不会抱怨找到元素,而是开始抱怨如何找不到在tns命名空间中声明的自定义类型 我在这里验证它: 我使用JAXB来确保文档符合其模式 赫尔曼 蒙斯特 模仿鸟巷1313号 卡米洛特 新泽西州 1

我试图读取XML文件,但他不断抛出以下错误:

  • cvc复杂类型.2.4.a:发现以开头的内容无效 元素“contact”。应为“{contact}”之一

  • 行号:2;栏目编号:68;cvc elt.1:找不到 元素“联系人”的声明。]

我在网上搜寻答案。如果我删除我的
targetNamespace
,那么它不会抱怨找到元素,而是开始抱怨如何找不到在
tns
命名空间中声明的自定义类型

我在这里验证它:

我使用JAXB来确保文档符合其模式



赫尔曼
蒙斯特
模仿鸟巷1313号
卡米洛特
新泽西州
15490
真的
艾尔
邦迪
危险巷9764号
芝加哥
白细胞介素
60629
假的

您的模式用于名称空间,但您的实例位于名称空间中。

您的模式用于名称空间,但您的实例位于名称空间中。

对于@Michael的观点,您必须将XSD的targetNamespace与示例XML使用的targetNamespace保持一致。让我们假设XML是正确的,而XSD是错误的。。。因为存在的问题不仅仅是名称空间不匹配

  • XSD将id描述为一个元素,而示例XML显示一个属性
  • 您的XSD在
    lastName
    之后显示
    firstName
    ,这很可能是打字错误;尽管如此,仍需要删除它以匹配XML
这是一个与XML匹配的固定XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://www.oracle.com/ContactsSchema"
    xmlns:tns="http://www.oracle.com/ContactsSchema">

    <xs:element name="contacts" type="tns:Contacts" />

    <xs:complexType name="Contacts">
        <xs:sequence>
            <xs:element name="contact" type="tns:Contact" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" />
    </xs:complexType>

    <xs:complexType name="Contact">
        <xs:sequence>
            <xs:element name="firstName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="address" type="tns:Address" />
            <xs:element name="favorite" type="xs:boolean" />
        </xs:sequence>
            <xs:attribute name="id" type="xs:long"/>
    </xs:complexType>

    <xs:complexType name="Address">
        <xs:sequence>
            <xs:element name="street" type="xs:string" />
            <xs:element name="city" type="xs:string" />
            <xs:element name="state" type="xs:string" />
            <xs:element name="zip" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>

说到@Michael,您必须使XSD的targetNamespace与示例XML使用的targetNamespace保持一致。让我们假设XML是正确的,而XSD是错误的。。。因为存在的问题不仅仅是名称空间不匹配

  • XSD将id描述为一个元素,而示例XML显示一个属性
  • 您的XSD在
    lastName
    之后显示
    firstName
    ,这很可能是打字错误;尽管如此,仍需要删除它以匹配XML
这是一个与XML匹配的固定XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://www.oracle.com/ContactsSchema"
    xmlns:tns="http://www.oracle.com/ContactsSchema">

    <xs:element name="contacts" type="tns:Contacts" />

    <xs:complexType name="Contacts">
        <xs:sequence>
            <xs:element name="contact" type="tns:Contact" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" />
    </xs:complexType>

    <xs:complexType name="Contact">
        <xs:sequence>
            <xs:element name="firstName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="address" type="tns:Address" />
            <xs:element name="favorite" type="xs:boolean" />
        </xs:sequence>
            <xs:attribute name="id" type="xs:long"/>
    </xs:complexType>

    <xs:complexType name="Address">
        <xs:sequence>
            <xs:element name="street" type="xs:string" />
            <xs:element name="city" type="xs:string" />
            <xs:element name="state" type="xs:string" />
            <xs:element name="zip" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>


联系!=tns:以猜的方式联系!=tns:在猜测处联系抱歉与id混淆,我最初打算将其作为xml中的一个元素。。。第二个名字,是的。。。完全错过了。然而,我确实作弊并使用了Eclipse的“从模式生成xml”,并解决了大部分问题。我假设我在xml中需要它:
xsi:schemaLocation=”http://www.oracle.com/ContactsSchema ContactsSchema.xsd“
@Mr.polywhill,关于
,它开始抱怨如何找不到在tns命名空间中声明的自定义类型
。。。在schema元素中将默认XML命名空间(在XSD文件中,即xmlns中)设置为等于targetNamespace。。。它被认为是一种最佳实践,可以免除您使用tns的需要,而且,它使引用和读取XSD的方式更加简单…很抱歉,id混淆了,我最初打算将其作为xml中的一个元素。。。第二个名字,是的。。。完全错过了。然而,我确实作弊并使用了Eclipse的“从模式生成xml”,并解决了大部分问题。我假设我在xml中需要它:
xsi:schemaLocation=”http://www.oracle.com/ContactsSchema ContactsSchema.xsd“
@Mr.polywhill,关于
,它开始抱怨如何找不到在tns命名空间中声明的自定义类型
。。。在schema元素中将默认XML命名空间(在XSD文件中,即xmlns中)设置为等于targetNamespace。。。被认为是一种最佳实践,它使您不再需要使用tns,而且,它使引用和读取XSD的方式变得更加简单。。。