If an element is nil (xsi:nil="true") and this element has child elements, Xercesc 3.1.0 does not report an error, although it should.
According to this link:
an element that is nil may not have any content and any child elements.
This behavior was also verified with Fujitsu's XWand XBRL Processor and Altovas XMLSpy, which both issue this error.
It seems as if Xercesc tries to implement this behavior, given that the comments in SchemaValidator.cpp, line 129 are a direct copy of the mentioned web page:
// if nillable, it's an error to have value
// XML Schema REC: Validation Rule: Element Locally Valid (Element)
// 3.2.1 The element information item must have no
// character or element information item [children].
However, no error is issued in such a constellation.
There is a related issue:
If the first child element of the nilled value (which is not nil) has content, Xercesc issues the misguiding error message:
Message: element '<name>' is nil and must be empty
It seems, as if the nil-flag of the parent element is incorrectly set for the child element.
For the second and all other child elements this is not the case (no error is reported).
Steps to reproduce:
Use the attached schema and instance document.
Invoke the DOMCount-sample from the Xercesc-distribution like this:
DOMCount.exe -v=always -s -n -f shiporder.xml