The element cannot contain text

Text appears directly inside an element that may only contain other elements.

The message, as .NET reports it
The element 'order' cannot contain text. List of possible elements expected: 'id'.

Why it happens

  • Stray text between child elements, or a value written into the parent instead of its child element.
  • A non-breaking space or other character that looks like whitespace but isn't.

How to fix it

Move the text into the right child element or delete it. Spaces and line breaks between elements are fine.

.NET throws an XmlSchemaValidationException at the first schema error unless XmlReaderSettings.ValidationEventHandler is set, which then receives every one with its line and position. A well-formedness error is an XmlException and ends reading whatever the settings.

The same problem in xmlvalid

xmlvalid validates with libxml2, which reports it as Character content other than whitespace is not allowed. It checks the whole document in your browser and lists every schema error with its line and column, not only the first.

Element 'order': Character content other than whitespace is not allowed because the content type is 'element-only'.

Example

Validated against order.xsd, below.

Reports the error
<order currency="EUR">hello
  <id>A-1</id>
  <qty>1</qty>
</order>
Fixed
<order currency="EUR">
  <id>A-1</id>
  <qty>1</qty>
  <note>hello</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>