2017-10-16 6 views
2

J'ai cherché en ligne et essayé pendant quelques jours mais je ne peux toujours pas énumérer toutes les erreurs, je peux seulement montrer 1 erreur. Pourquoi? Je dois énumérer toutes les erreurs. J'espère que quelqu'un m'aidera. Voici mon code de gestionnaire de validation et d'erreur. Le programme va à error() seulement, et seulement une fois. C'est une erreur pour le premier élément mais il manque aussi d'autres éléments dans le XML, il ne les affiche pas.Comment lister toutes les erreurs après avoir validé xml avec xsd?

import java.io.File; 
import java.io.IOException; 

import javax.xml.XMLConstants; 
import javax.xml.transform.Source; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.validation.Schema; 
import javax.xml.validation.SchemaFactory; 
import javax.xml.validation.Validator; 

import org.xml.sax.SAXException; 

public class XMLValidate1 { 

    public static void main(String[] args) throws SAXException, IOException { 


     SchemaFactory factory 
     = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     File schemaLocation = new File("Q1.xsd"); 
     Schema schema = factory.newSchema(schemaLocation); 
     Validator validator = schema.newValidator(); 
     validator.setErrorHandler(new ValidateErrorHandler());  
     Source xmlFile = new StreamSource(new File("Q1.xml")); 

     try { 
      validator.validate(xmlFile); 
      System.out.println(xmlFile.getSystemId() + " is valid."); 
     } 
     catch (SAXException ex) { 
      System.out.println(xmlFile.getSystemId() + " is not valid because "); 
      System.out.println(ex.getMessage()); 
     } 

    } 

} 

Ci-dessous mon ErrorHandler

import org.xml.sax.ErrorHandler; 
import org.xml.sax.SAXException; 
import org.xml.sax.SAXParseException; 

public class ValidateErrorHandler implements ErrorHandler { 

    public void warning(SAXParseException ex) { 
     System.out.println("Warning: "); 
     System.err.println(ex.getMessage()); 
    } 

    public void error(SAXParseException ex) { 
     System.out.println("Error: "); 
     System.err.println(ex.getMessage()); 
    } 

    public void fatalError(SAXParseException ex) throws SAXException { 
     System.out.println("Fatal error: "); 
     System.err.println(ex.getMessage()); 
    } 

}

+0

Je ne vois aucune liste du tout. – shmosel

Répondre

2

Tout d'abord, cela dépend de quel schéma validateur que vous utilisez. L'interface JAXP est conçue pour fonctionner avec une variété de validateurs de schéma. Si vous utilisez celui par défaut fourni avec le JDK, vous devez nous en informer.

Tous les valideurs vont pouvoir récupérer à partir de certaines erreurs et pas d'autres, donc l'autre chose que nous devons savoir est quelle est l'erreur particulière. Il serait utile de poster un spécimen XSD et XML pour pouvoir comparer les résultats. Si vous souhaitez utiliser Saxon comme moteur de validation de schéma, vous avez la possibilité de vous fournir une liste de toutes les erreurs de validation dans un rapport XML, que vous pouvez mettre en forme selon vos besoins en utilisant XSLT.