Valider un xml avec Xerces et lister toutes les erreurs[résolu]

Valider un xml avec Xerces et lister toutes les erreurs[résolu] - Java - Programmation

Marsh Posté le 26-10-2006 à 15:22:01    

Voilà j'utilise Xerces pour valider un fichier XML avec cette petite classe

Code :
  1. /**
  2.  * Methode de lancer l'analyse du XML
  3.  *  
  4.  * @param filename
  5.  *           <u>String</u>
  6.  * @return le résultat sous forme de fluxXML <u>String</u>
  7.  */
  8. public String process() {
  9.  isValid = true; // Valide jusqu'à ce qu'une erreur se produise !
  10.  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  11.  dbf.setIgnoringComments(true);
  12.  dbf.setNamespaceAware(true);
  13.  dbf.setValidating(true);
  14.  dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
  15.  //dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdFile));
  16.  try {
  17.   // Parsage du fichier XML avec DOM
  18.   DocumentBuilder db = dbf.newDocumentBuilder();
  19.   db.setErrorHandler(new ErrorHandler() {
  20.    public void fatalError(SAXParseException e) {
  21.     message = "Erreur de validation XSD - Erreur fatal" + e;
  22.     isValid = false;
  23.    }
  24.    public void error(SAXParseException e) {
  25.     message = "Erreur de validation XSD - Erreur fatal" + e;
  26.     isValid = false;
  27.    }
  28.    public void warning(SAXParseException e) {
  29.     message = "Erreur de validation XSD - Erreur fatal" + e;
  30.     isValid = false;
  31.    }
  32.   });
  33.   Document doc = db.parse(filename);
  34.   System.out.println(doc.getFirstChild());
  35.  } catch (ParserConfigurationException pcee) {
  36.   System.out.println(pcee);
  37.  } catch (IOException ioe) {
  38.   System.out.println(ioe);
  39.  } catch (SAXException saxe) {
  40.   System.out.println(saxe);
  41.  }
  42.  if (isValid)
  43.  {
  44.   return message;
  45.  }
  46.  else
  47.  {
  48.   return HEADER_ERROR_MARKUP + message + FOOTER_ERROR_MARKUP;
  49.  }
  50. }


 
 
Mais petit probleme.
Je n'arrive pas lister l'ENSEMBLE des erreur contenues dans un XML, elle s'arrete à la première erreur rencontrer.
Comment puis je faire pour les avoir toutes ?
D'avance merci. :hello:


Message édité par Aquarius_28 le 26-10-2006 à 18:26:03
Reply

Marsh Posté le 26-10-2006 à 15:22:01   

Reply

Marsh Posté le 26-10-2006 à 18:24:40    

Bon finalement en tripatouillant j'ai réussi a faire ce que je voulait, cette classe permet de lister les 50 première erreurs d'un XML.

Code :
  1. static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
  2. static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
  3. static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
  4. static final String HEADER_ERROR_MARKUP = "<node>\n";
  5. static final String FOOTER_ERROR_MARKUP = "</node>\n";
  6. static final String HEADER_DETAIL_ERROR_MARKUP = "<detail>";
  7. static final String FOOTER_DETAIL_ERROR_MARKUP = "</detail>\n";
  8. static final String VALID_MARKUP = "<ok/>";
  9. static boolean isValid;
  10. static int compteurErreur;
  11. static
  12. {
  13.  isValid = false;
  14. }
  15. static String message=  "";
  16. /**
  17.  * Methode de lancer l'analyse du XML
  18.  *  
  19.  * @param filename
  20.  *           <u>String</u>
  21.  * @return le résultat sous forme de fluxXML <u>String</u>
  22.  */
  23. public String process()
  24. {
  25.  compteurErreur = 0;
  26.  isValid = true; // Valide jusqu'à ce qu'une erreur se produise !
  27.  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  28.  dbf.setIgnoringComments(true);
  29.  dbf.setNamespaceAware(true);
  30.  dbf.setValidating(true);
  31.  dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
  32.  // dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdFile));
  33.  try
  34.  {
  35.   ErrorHandler handler = new ErrorHandler()
  36.   {
  37.    public void warning(SAXParseException e) throws SAXException
  38.    {
  39.     compteurErreur ++;
  40.     isValid = false;
  41.     message += HEADER_DETAIL_ERROR_MARKUP + "Erreur de validation XSD - warning "
  42.       + e.getMessage() + FOOTER_DETAIL_ERROR_MARKUP;
  43.     if (compteurErreur>50)
  44.     {
  45.      throw e;
  46.     }
  47.    }
  48.    public void error(SAXParseException e) throws SAXException
  49.    {
  50.     compteurErreur ++;
  51.     isValid = false;
  52.     message += HEADER_DETAIL_ERROR_MARKUP + "Erreur de validation XSD - warning "
  53.     + e.getMessage() + FOOTER_DETAIL_ERROR_MARKUP;
  54.     if (compteurErreur>50)
  55.     {
  56.      throw e;
  57.     }
  58.    }
  59.    public void fatalError(SAXParseException e) throws SAXException
  60.    {
  61.     compteurErreur ++;
  62.     isValid = false;
  63.     message += HEADER_DETAIL_ERROR_MARKUP + "Erreur de validation XSD - warning "
  64.     + e.getMessage() + FOOTER_DETAIL_ERROR_MARKUP;
  65.     throw e;
  66.    }
  67.   };
  68.   // Parsage du fichier XML avec DOM
  69.   DocumentBuilder db = dbf.newDocumentBuilder();
  70.   db.setErrorHandler(handler);
  71.   Document doc = db.parse(filename);
  72.   System.out.println(doc.getFirstChild());
  73.  }
  74.  catch (ParserConfigurationException pcee)
  75.  {
  76.   //System.out.println(pcee);
  77.  }
  78.  catch (IOException ioe)
  79.  {
  80.   //System.out.println(ioe);
  81.  }
  82.  catch (SAXException saxe)
  83.  {
  84.   //System.out.println(saxe);
  85.  }
  86.  if (isValid)
  87.  {
  88.   return VALID_MARKUP;
  89.  }
  90.  else
  91.  {
  92.   return HEADER_ERROR_MARKUP + message + FOOTER_ERROR_MARKUP;
  93.  }
  94. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed