我正在尝试读取XML文件,但他一直在抛出这个错误:
cvc-complex-type.2.4.a:找到无效的内容 元素'联系'。预计会有一个“{contact}”。
lineNumber:2; columnNumber:68; cvc-elt.1:找不到了 元素'联系人'的声明。]
我已经在网上搜索了答案。如果我删除targetNamespace
,那么它不会抱怨找到元素,但它开始抱怨它无法找到tns
命名空间中声明的自定义类型。
我在此验证:http://www.corefiling.com/opensource/schemaValidate.html
我正在使用JAXB来确保文档符合其架构。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/ContactsSchema"
xmlns:tns="http://www.example.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="id" type="xs:long"/>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
<xs:element name="firstName" type="xs:string" />
<xs:element name="address" type="tns:Address" />
<xs:element name="favorite" type="xs:boolean" />
</xs:sequence>
</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>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contacts xmlns="http://www.oracle.com/ContactsSchema" name="Test">
<contact id="1">
<firstName>Herman</firstName>
<lastName>Munster</lastName>
<address>
<street>1313 Mockingbird Lane</street>
<city>Camelot</city>
<state>NJ</state>
<zip>15490</zip>
</address>
<favorite>true</favorite>
</contact>
<contact id="2">
<firstName>Al</firstName>
<lastName>Bundy</lastName>
<address>
<street>9764 Jeopardy Lane</street>
<city>Chicago</city>
<state>IL</state>
<zip>60629</zip>
</address>
<favorite>false</favorite>
</contact>
</contacts>
答案 0 :(得分:3)
至于@Michael的观点,您必须将XSD的targetNamespace与示例XML使用的一致。让我们假设XML是正确的,而XSD是错误的...因为存在的问题多于命名空间不匹配...
firstName
之后显示lastName
,这很可能是拼写错误;尽管如此,需要将其删除以匹配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>
答案 1 :(得分:1)
您的架构适用于命名空间http://www.example.com/ContactsSchema,但您的实例位于命名空间http://www.oracle.com/ContactsSchema中。