So erhalten Sie das Element einer ungültigen XML-Datei mit fehlgeschlagener xsd-Validierung

Ich verwende derzeit mein XSD, um mein XML zu validieren. Dieser Teil funktioniert einwandfrei. Mein Muster ist, dass ich das Element des Tags / Werts erhalten möchte, das ungültig ist.

    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;
    }

Die Idee, die ich hatte und die nicht praktikabel ist, besteht darin, in der Nachricht nach dem Wort "type" oder "end-tag" zu suchen und den Wert danach zu ermitteln. Ich weiß jedoch, dass dies keine gute Übung sein wird! Ich finde das frustrierend, da ich das Tag sehen kann, das ungültig ist, aber nicht darauf zugreifen kann!

Hier sind einige Beispiele für das gewünschte Element

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>".

Antworten auf die Frage(2)

Ihre Antwort auf die Frage