Obecnie używam mojego XSD do sprawdzania poprawności mojego xml. Ta część działa dobrze mój porblem jest to, że chcę uzyskać element tag/value, który jest nieprawidłowy.Jak uzyskać element i nieprawidłowy plik xml z nieudaną walidacją xsd
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
XMLStreamReader reader = null;
SchemaFactory factory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(xsdschemalocation);
Validator validator = schema.newValidator();
try
{
reader = XMLInputFactory.newInstance().createXMLStreamReader(new StreamSource(new StringReader(xml)));
} catch (XMLStreamException ex)
{
LogController.getLogger().logSEVERE("Unable to create the streamreader from the xml source", ex.getLocalizedMessage());
return false;
}
try
{
validator.validate(new StAXSource(reader));
}
catch (IOException ex)
{
LogController.getLogger().logSEVERE("IOException in the validatation has been caused as the reader has become null", ex.getLocalizedMessage());
return false;
}
catch(SAXException saxe)
{
LogController.getLogger().logWARNING("Their is a validation error with the xml", saxe.getLocalizedMessage());
//*****HERE I WANT THE TAG THAT HAS THE ERROR
ClientCommunication.ErrorMessageForClient(VALIDATION_ERROR, socket);
CloseClientConnection();
return;
}
Pomysł miałem co nie jest praktyczne jest, aby spojrzeć w komunikacie dla słowa „rodzaj” lub „end-tag” i uzyskać wartość po nim, jednak wiem, że to nie będzie dobry ćwiczyć! To frustrujące, ponieważ widzę tag, który jest nieważny, ale nie mogę go zdobyć!
Oto kilka przykładów elementu Chcę
1. Message: Element type "first" must be followed by either attribute specifications, ">" or "/>".
2. javax.xml.stream.XMLStreamException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 353; cvc-pattern-valid: Value '079e989989' is not facet-valid with respect to pattern '([0-9])+' for type 'phoneNumber'.
3. Message: The element type "firstLine" must be terminated by the matching end-tag "</firstLine>".
Czy mimo to mogę uzyskać niepoprawną wartość również w postaci ciągu znaków. –
Dokładnie to, co chciałem – pup784