Buongiorno a tutti, come da titolo ho un problema con il parser SAX per l'XML.
La mia applicazione serve per gestire una libreria, sto aggiungendo una funzionalità per importare/esportare i database in XML.
Ho creato anche un file DTD che dovrebbe garantirmi la formattazione corretta.
Ora il problema: quando cerco di importare il file XML viene lanciata un'eccezione
A prima vista potrei pensare che mancano le virgolette quando cerco di leggere gli attributi del tag DATABASE, in realtà le virgolette ci sono.java.io.IOException: org.xml.sax.SAXParseException: Open quote is expected for attribute "nameDB" associated with an element type "DATABASE".
Qui sotto vi posto il DTD e l'XML che viene generato automaticamente quando faccio l'esportazione dalla mia applicazione.
File DTD (chiamato DTDdatabase.dtd):
Al posto dei puntini ci sono tutte le definizioni dei TAG che rappresentano le tabelle elencate qui sopra.codice:<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT DATABASE (LOGICALBOOK*,PHYSICALBOOK*,PERSON*,TAG*,LANGUAGE*,ROLE*,PUBLISHER*,SERIES*,STATUS*,CATEGORY*, LOGBOOK_TAG*,LOGBOOK_LANG*,LOGBOOK_PERSON*,NLOGY_OPERA*,LOGBOOK_PHYBOOK*,COLLECTION_VOLUME*, PHYBOOK_CAT*,PHYBOOK_LANG*,PHYBOOK_PERSON*)> <!ATTLIST DATABASE nameDB CDATA #REQUESTED > ...
File XML:
Anche qui ci sarebbero tutte le info che però penso siano superflue.codice:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE DATABASE SYSTEM "DTDdatabase.dtd"> <DATABASE nameDB="MyLibrary"> <LOGICALBOOK> <IDLBOOK>1</IDLBOOK> <TITLE>The Lord of the Rings</TITLE> ...
In caso vi servano i file interi posso caricarli da qualche parte per evitare un'enormità di pagina.
Il codice JAVA che ho usato per leggere è questo:
LookupHandler è la classe con i metodi startElement, endElement e characters che il SAX usa per capire quando un tag è aperto o meno.codice:String path = s; LookupHandler h = new LookupHandler(); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating(true); // enable the use of DTD spf.setNamespaceAware(false); try { SAXParser sp = spf.newSAXParser(); sp.parse(path, h); if (h.hadProblems()) { System.out.println("Document doesn't contain fatal error"); } } catch (ParserConfigurationException ex) { ex.printStackTrace(); System.exit(10); } catch (SAXException sxe) { //System.out.println("Document contains fatal error"); try { throw new IOException(sxe); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Qualcuno riesce a capire cosa non va?

Rispondi quotando