我有一个XML文件需要和XSD文件一起验证,但是当我想用XSD文件验证我的XML时,我得到了这个错误。
Cvc-complex-type.2.4.a: 发现以元素'ClientData'开头的内容无效。中的一个元素。
{"http://www.myTest/xml/Import/user/data":ClientData}
'是预期的,'2'行,'27'列。
这是我的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<prefix:UteXmlComunicazione xmlns:prefix="http://www.myTest/xml/Import/user/data">
<ClientData>
<client>
<pfPg>PF</pfPg>
<Family>Alex White</Family>
<name></name>
</client>
<vendor>
<Timeperiod>
<NumberofFactor></NumberofFactor>
<year>2018</year>
</Timeperiod>
<Address>
<Address1>
<top>Via</top>
<street>DANTE</street>
<number>108</number>
<Zipcode>20776</Zipcode>
<Code>033032</Code>
</Address1>
</Address>
</vendor>
</ClientData>
</prefix:UteXmlComunicazione>
而这是XSD
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.myTest/xml/Import/user/data" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="UteXmlComunicazione">
<xs:complexType>
<xs:sequence>
<xs:element name="ClientData" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="client" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="pfPg"/>
<xs:element type="xs:string" name="Family"/>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="vendor" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TimePeriod" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:short" name="year"/>
<xs:element type="xs:byte" name="NumberofFactor"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Address" minOccurs="0">
我不知道是什么问题......请你告诉我是什么问题?
你眼前的错误是由于 ClientData
不在 XSD 的目标命名空间中。 看起来你打算在根元素上声明一个默认的命名空间,但你只是改变了根元素的命名空间。
改变
<prefix:UteXmlComunicazione xmlns:prefix="http://www.myTest/xml/Import/user/data">
到
<UteXmlComunicazione xmlns="http://www.myTest/xml/Import/user/data">
来修复您的即时错误。
这里是您的XML的更新副本,它将根据您的XSD的更新副本进行验证。 (这里是一个更新的XML副本,它将与你的XSD的更新副本进行验证。Address
元素已经被省略,因为你没有在你的XSD中包含它的定义,而且它不值得在这里构建)。)
<?xml version="1.0" encoding="UTF-8"?>
<UteXmlComunicazione
xmlns="http://www.myTest/xml/Import/user/data"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.myTest/xml/Import/user/data try.xsd"
>
<ClientData>
<client>
<pfPg>PF</pfPg>
<Family>Alex White</Family>
<name></name>
</client>
<vendor>
<TimePeriod>
<year>2018</year>
<NumberofFactor>0</NumberofFactor>
</TimePeriod>
</vendor>
</ClientData>
</UteXmlComunicazione>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://www.myTest/xml/Import/user/data"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="UteXmlComunicazione">
<xs:complexType>
<xs:sequence>
<xs:element name="ClientData" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="client" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="pfPg"/>
<xs:element type="xs:string" name="Family"/>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="vendor" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TimePeriod" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:short" name="year"/>
<xs:element type="xs:byte" name="NumberofFactor"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在XSD中,你有 elementFormDefault="qualified"
这使得所有的元素都需要被限定,而不仅仅是根元素。由于没有 prefix
在你 ClientData
在XML中,这是不工作的。
因此,或者在XML中对所有元素进行限定,或者改变XSD elementFormDefault的值。
https:/www.w3schools.comxmlel_schema.asp
elementFormDefault可选。在这个模式的目标命名空间中声明的元素的形式,该值必须是 "限定的 "或 "不限定的"。该值必须是 "qualified "或 "unqualified"。默认值是 "unqualified"。"unqualified "表示来自目标命名空间的元素不需要用命名空间前缀来限定。"qualified "表示来自目标命名空间的元素必须用命名空间前缀来限定。