Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    25

    [JAVA] Validare xml jdom

    Ciao raga,
    devo validare un xml (un Document del package org.jdom.Document) secondo uno schema che ho. Ho trovato una soluzione in rete ma è buona solo se si conosce l'URI del file xml.

    Eccola :
    codice:
    import java.io.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import org.jdom.input.*;
    
    public class ValidationTest {
     private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
     private static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
     private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
    
     public static boolean validate(String docURI){
      boolean t = false;
      try {
       SAXParserFactory factory = SAXParserFactory.newInstance();
       factory.setNamespaceAware(true);
       factory.setValidating(true);
       SAXParser parser = factory.newSAXParser();
    
       String schemaURI = "c:\\schema.xsd";
       parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
       parser.setProperty(JAXP_SCHEMA_SOURCE, new File(schemaURI));
       DefaultHandler handler = new DummyHandler();
       parser.parse(new FileInputStream(docURI), handler);
    
       t = true;
       }
       catch(Exception e) {
        e.printStackTrace();
       }
    
       return t;
    }
    Io invece ho bisogno di scrivere un metodo 'validate' che prenda in input un oggetto org.jdom.Document.

    Qualcuno ha già provato qualcosa del genere?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao; secondo me puoi benissimo adattare questo metodo validate come ti serve; puoi ad esempio scriverlo accettando un Document in ingresso e da questo document ti generi un input stream che passerai al metodo parse del SAXParser; per avere un elenco di tutti i metodi di SAXParser:
    http://java.sun.com/j2se/1.4.2/docs/...SAXParser.html

    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  3. #3
    Per validare un documento XML ho usato questo metodo:

    Scrivo il documento XML in un file temporaneo e lo faccio caricare abilitando il check degli errori. In questo modo lo valido.
    Questo è il metodo che uso per caricare e validare il documento.
    ExceptionManager è una mia classe che raccoglie le info degli errori e me le visualizza sottoforma di albero.
    Puoi benissimo inserire delle println all'interno dei metodi dell'ErrorHandler
    codice:
    public synchronized Element load(String path, boolean check){
    ExceptionManager.erase();
    File f=new File(path);         
            SAXBuilder builder = new SAXBuilder(false);
            if(check){
                builder.setErrorHandler(new ErrorHandler(){
                    public void warning(SAXParseException exception) throws SAXException {
                        ExceptionManager.addError(new Exception(exception.getMessage()+"  Line : "+(exception .getLineNumber()-1)+" Column : "+exception.getColumnNumber()));
                        InitLogger.getLogger().severe(exception.getMessage());
                    }
                    public void error(SAXParseException exception) throws SAXException {
                        ExceptionManager.addError(new Exception(exception.getMessage()+"  Line : "+(exception .getLineNumber()-1)+" Column : "+exception.getColumnNumber()));
                        InitLogger.getLogger().severe(exception.getMessage());
                     }
                    public void fatalError(SAXParseException exception) throws SAXException {
                        ExceptionManager.addError(new Exception(exception.getMessage()+"  Line : "+(exception .getLineNumber()-1)+" Column : "+exception.getColumnNumber()));
                        InitLogger.getLogger().severe(exception.getMessage());                    
                    }
                    
                });
                
            builder.setValidation(true);
            }
           
            Document doc = null;
            
                try {
                    doc = (Document) builder.build(f);
                } catch (JDOMException e) {
    
                } catch (IOException e) {
                    ExceptionManager.addError(e);
                }
            
            if(ExceptionManager.areErrors())
                return null;
            return doc.detachRootElement();    
    }
    Non è molto molto elegante come metodo, ma devo dire che non ho trovato altre soluzioni
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.