Avatar billede js26 Nybegynder
05. april 2002 - 15:16 Der er 5 kommentarer og
1 løsning

Xml Schema

Er der nogen der har prøvet at parse et XML dokument med Schema og få det valideret.
Avatar billede soelvpil Nybegynder
05. april 2002 - 16:20 #1
Nope!

Xerces2-parseren skulle dog kunne klare arbejdet (xml.apache.org/xerces2-j).

Mon ikke det bare handler om setValidating(true) på DocumentBuilderFactory'en, og så skulle resten køre af sig selv (ligesom med DTD'er)?
Avatar billede soelvpil Nybegynder
05. april 2002 - 16:21 #2
Og så selvfølgelig lige have refereret schemaet i xml-filen.
Avatar billede soelvpil Nybegynder
05. april 2002 - 16:21 #3
SVar evt tilbage om det virker, så vi andre kan lære lidt!
Avatar billede js26 Nybegynder
08. april 2002 - 14:19 #4
Jeg har ikke tidligere prøvet med DTD, men har nu forsøgt med DTD istedet og jeg får stadigvæk ikke nogen fejl. Følgende javakode parser xml som refererer til en DTD og hvor jeg har provokeret fejl. Hvis jeg laver en XML-syntax fejl kaster den fint en SAXParserExeption, men ikke hvis jeg indsætter et tag der ikke er i DTD'en.
Jeg bruger Xerces 1.4.4

public static void main(String[] args) {
    try {
        DocumentBuilderFactoryImpl dbfi = new DocumentBuilderFactoryImpl();
        dbfi.setValidating(true);
        DocumentBuilder dbi = dbfi.newDocumentBuilder();
        org.xml.sax.helpers.DefaultHandler dh = new org.xml.sax.helpers.DefaultHandler();
        dbi.setErrorHandler(dh);
        Document doc = dbi.parse("http://localhost:8080/test/GetList.xml");
    }
        catch (org.xml.sax.SAXParseException e) {
            e.printStackTrace(System.err);
    }
        catch (Throwable e) {
            e.printStackTrace(System.err);
    }

}
Avatar billede js26 Nybegynder
09. april 2002 - 13:42 #5
Her er løsningen:

import org.apache.xerces.parsers.DOMParser;
import org.apache.xerces.dom.DocumentImpl;
public class Parse {
public static void main(String[] args) {
    try {
        DOMParser parser = new DOMParser();
        SAXErrorHandler seh = new SAXErrorHandler();
        parser.setErrorHandler(seh);
        parser.setFeature("http://xml.org/sax/features/validation", true);
        parser.setFeature("http://apache.org/xml/features/validation/schema", true);
        DocumentImpl doc = new DocumentImpl();
        parser.parse("http://localhost:8080/test/GetList.xml");
    }
        catch (Throwable e) {
            e.printStackTrace(System.err);
    }

}
}
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class SAXErrorHandler 
    implements ErrorHandler {


    public void error(SAXParseException ex)
        throws SAXException{
        throw ex;
    }
    public void fatalError(SAXParseException ex)
        throws SAXException{
        throw ex;
    }
    public void warning(SAXParseException ex)
        throws SAXException{
        throw ex;
    }
}
Avatar billede js26 Nybegynder
09. april 2002 - 13:44 #6
Følgende linie kan udelades:
DocumentImpl doc = new DocumentImpl();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester