cvc-complex-type.2.4.d: No child element is expected at this point
An element appears after the parent's content is already complete: the schema allows nothing more there.
cvc-complex-type.2.4.d: Invalid content was found starting with element 'extra'. No child element is expected at this point.
Why it happens
- An element the schema doesn't know at all, added at the end of its parent.
- One occurrence too many of the last element (
maxOccursreached). - An element that belongs earlier in the sequence, placed after the last one.
How to fix it
Remove the element, or move it where the schema allows it; if it should be allowed, add it to the parent's type in the schema. Unlike 2.4.a, Xerces lists nothing because nothing at all is accepted at that point.
Java's schema validation (javax.xml.validation.Validator, and JAXB or Spring on top of it) throws at the first error unless you set an ErrorHandler whose error() records the SAXParseException and carries on; each one has getLineNumber() and getColumnNumber(). A well-formedness error ends parsing whatever the handler does.
The same problem in xmlvalid
xmlvalid validates with libxml2, which reports it as This element is not expected. It checks the whole document in your browser and lists every schema error with its line and column, not only the first.
Element 'qty': This element is not expected. Expected is ( id ).
Example
Validated against order.xsd, below. In order.xsd, note is the last child an order may have.
<order currency="EUR">
<id>A-1</id>
<qty>2</qty>
<note>gift</note>
<extra/>
</order>
<order currency="EUR">
<id>A-1</id>
<qty>2</qty>
<note>gift</note>
</order>
order.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string"/>
<xs:element name="qty" type="xs:int"/>
<xs:element name="status" type="Status" minOccurs="0"/>
<xs:element name="code" type="Code" minOccurs="0"/>
<xs:element name="note" type="Short" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="currency" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="open"/>
<xs:enumeration value="paid"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Code">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3}-[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Short">
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>