XSD 验证期间出现错误 cvc-complex-type.2.4.d
Error cvc-complex-type.2.4.d during XSD validation
我正在尝试使用 XSD 架构验证某些 XML 文件,但出现错误 cvc-complex-type.2。4.d:发现以元素开头的内容无效'Number'。此时不应有子元素。“31”行,“11”列。
这涉及从 PrintableText
class.
继承的字段 Number
和 Description
我已经尝试更改 <xs:element />
对象中的 minOccurs
和 maxOccurs
,但这会导致相同的行为。
XML 文件:
<?xml version="1.0"?>
<Receipt>
<Items>
<FiscalItem>
<Name>Przedmiot 1</Name>
<ReturnablePackaging>false</ReturnablePackaging>
<Quantity>1</Quantity>
<PTU>A</PTU>
<OriginalPrice>1.0</OriginalPrice>
<Price>1.0</Price>
</FiscalItem>
<FiscalItem>
<Name>Przedmiot 2</Name>
<ReturnablePackaging>false</ReturnablePackaging>
<Quantity>1</Quantity>
<PTU>B</PTU>
<OriginalPrice>1.0</OriginalPrice>
<Price>5.0</Price>
</FiscalItem>
</Items>
<Tedners>
<FiscalTender>
<Type>CASH</Type>
<Amount>5.0</Amount>
</FiscalTender>
<FiscalTender>
<Type>CREDITCARD</Type>
<Amount>5.0</Amount>
</FiscalTender>
</Tedners>
<!-- VVV THIS IS LINE VVV -->
<Description>
<Value>180</Value>
</Description>
<Number>
<Value>12345</Value>
</Number>
</Receipt>
XSD 文件:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Receipt" nillable="true" type="Receipt" />
<xs:complexType name="Receipt">
<xs:complexContent mixed="false">
<xs:extension base="FiscalDocumentBase">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="FiscalDocumentBase" abstract="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" nillable="true" name="Items" type="ArrayOfFiscalItem" />
<xs:element minOccurs="0" maxOccurs="unbounded" nillable="true" name="Tedners" type="ArrayOfFiscalTender" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFiscalItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="FiscalItem" nillable="true" type="FiscalItem" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FiscalItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ReturnablePackaging" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="Quantity" type="xs:decimal" />
<xs:element minOccurs="0" maxOccurs="1" name="PTU" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="OriginalPrice" type="xs:decimal" />
<xs:element minOccurs="1" maxOccurs="1" name="Price" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFiscalTender">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="FiscalTender" nillable="true" type="FiscalTender" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FiscalTender">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Type" type="FiscalTenderType" />
<xs:element minOccurs="1" maxOccurs="1" name="Amount" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="FiscalTenderType">
<xs:restriction base="xs:string">
<xs:enumeration value="CASH" />
<xs:enumeration value="CREDITCARD" />
<xs:enumeration value="CHECK" />
<xs:enumeration value="BOND" />
<xs:enumeration value="CREDIT" />
<xs:enumeration value="OTHER" />
<xs:enumeration value="VOUCHER" />
<xs:enumeration value="ACCOUNT" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PrintableText">
<xs:simpleContent>
<xs:extension base="xs:string" />
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ReceiptNumber">
<xs:simpleContent>
<xs:extension base="PrintableText" />
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ReceiptDescription">
<xs:simpleContent>
<xs:extension base="PrintableText" />
</xs:simpleContent>
</xs:complexType>
</xs:schema>
编辑:删除 Number
字段导致通过验证。
好的...所以我的朋友发现了问题。在 XSD 模式中,元素的顺序应该不同。
原文:
...
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
...
固定:
...
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
...
我正在尝试使用 XSD 架构验证某些 XML 文件,但出现错误 cvc-complex-type.2。4.d:发现以元素开头的内容无效'Number'。此时不应有子元素。“31”行,“11”列。
这涉及从 PrintableText
class.
Number
和 Description
我已经尝试更改 <xs:element />
对象中的 minOccurs
和 maxOccurs
,但这会导致相同的行为。
XML 文件:
<?xml version="1.0"?>
<Receipt>
<Items>
<FiscalItem>
<Name>Przedmiot 1</Name>
<ReturnablePackaging>false</ReturnablePackaging>
<Quantity>1</Quantity>
<PTU>A</PTU>
<OriginalPrice>1.0</OriginalPrice>
<Price>1.0</Price>
</FiscalItem>
<FiscalItem>
<Name>Przedmiot 2</Name>
<ReturnablePackaging>false</ReturnablePackaging>
<Quantity>1</Quantity>
<PTU>B</PTU>
<OriginalPrice>1.0</OriginalPrice>
<Price>5.0</Price>
</FiscalItem>
</Items>
<Tedners>
<FiscalTender>
<Type>CASH</Type>
<Amount>5.0</Amount>
</FiscalTender>
<FiscalTender>
<Type>CREDITCARD</Type>
<Amount>5.0</Amount>
</FiscalTender>
</Tedners>
<!-- VVV THIS IS LINE VVV -->
<Description>
<Value>180</Value>
</Description>
<Number>
<Value>12345</Value>
</Number>
</Receipt>
XSD 文件:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Receipt" nillable="true" type="Receipt" />
<xs:complexType name="Receipt">
<xs:complexContent mixed="false">
<xs:extension base="FiscalDocumentBase">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="FiscalDocumentBase" abstract="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" nillable="true" name="Items" type="ArrayOfFiscalItem" />
<xs:element minOccurs="0" maxOccurs="unbounded" nillable="true" name="Tedners" type="ArrayOfFiscalTender" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFiscalItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="FiscalItem" nillable="true" type="FiscalItem" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FiscalItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ReturnablePackaging" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="Quantity" type="xs:decimal" />
<xs:element minOccurs="0" maxOccurs="1" name="PTU" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="OriginalPrice" type="xs:decimal" />
<xs:element minOccurs="1" maxOccurs="1" name="Price" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFiscalTender">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="FiscalTender" nillable="true" type="FiscalTender" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FiscalTender">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Type" type="FiscalTenderType" />
<xs:element minOccurs="1" maxOccurs="1" name="Amount" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="FiscalTenderType">
<xs:restriction base="xs:string">
<xs:enumeration value="CASH" />
<xs:enumeration value="CREDITCARD" />
<xs:enumeration value="CHECK" />
<xs:enumeration value="BOND" />
<xs:enumeration value="CREDIT" />
<xs:enumeration value="OTHER" />
<xs:enumeration value="VOUCHER" />
<xs:enumeration value="ACCOUNT" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PrintableText">
<xs:simpleContent>
<xs:extension base="xs:string" />
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ReceiptNumber">
<xs:simpleContent>
<xs:extension base="PrintableText" />
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ReceiptDescription">
<xs:simpleContent>
<xs:extension base="PrintableText" />
</xs:simpleContent>
</xs:complexType>
</xs:schema>
编辑:删除 Number
字段导致通过验证。
好的...所以我的朋友发现了问题。在 XSD 模式中,元素的顺序应该不同。
原文:
...
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
...
固定:
...
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="ReceiptDescription" />
<xs:element minOccurs="0" maxOccurs="1" name="Number" type="ReceiptNumber" />
...