Hi Mukul,
Thank you for your response and suggestion. The current error report is clear
and useful. But I still think it will be nice if both 'A' and 'B' are listed in
the error report, since both of them are not expected to be there.
Herong
On Friday, June 19, 2020, 2:47:09 PM GMT+8, Mukul Gandhi
<[email protected]> wrote:
Hi Herong,
On Thu, Jun 18, 2020 at 12:29 PM Herong Yang <[email protected]> wrote:
By default, Xerces2 only reports only the first invalid sub-element and skips
other subsequent invalid siblings. Is the any way to set Xerces2 to report all
invalid sub-elements?
I don't think that, what you're asking for is possible with Xerces-J.
Personally, I do find the error report you're getting with your XML and XSD
document samples, from Xerces-J to be useful.
Here is the sample XML: <?xml version="1.0"?><root> <X/> <A/> <Y/> <B/></root>
Here is the XML Schema: <?xml version="1.0"?><xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root">
<xs:complexType> <xs:all> <xs:element name="X" minOccurs="0"/> <xs:element
name="Y" minOccurs="0"/> </xs:all> </xs:complexType> </xs:element></xs:schema>
Here is the Xerces2 validation output: [Error] simple_4.xml:4:6:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'A'.
One of '{Y}' is expected.
I want to see both element 'A' and element 'B' being reported in the output.
For your requirements stated above, I could probably suggest the following XML
Schema 1.1 document (which makes the intent of XML Schema logic more clear),
<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root"> <xs:complexType> <xs:sequence> <xs:any
processContents="skip" minOccurs="0" maxOccurs="2"/> </xs:sequence>
<xs:assert test="if (count(*) = 0) then true() else
if (count(*) = 1) then (*[1]/name() = ('X', 'Y')) else
if (count(*) = 2) then ((*[1]/name() = 'X' and *[2]/name() = 'Y')
or
(*[1]/name() = 'Y' and *[2]/name() = 'X'))
else false()"/> </xs:complexType>
</xs:element> </xs:schema>
--
Regards,
Mukul Gandhi