Come posso forzare un parser SAX (in particolare, Xerces in Java) per utilizzare una DTD durante l'analisi di un documento senza avere qualsiasi doctype nel documento di input? È possibile?Come posso forzare un parser SAX a usare una DTD se non ne viene specificato uno nel file di input?
Qui ci sono alcuni dettagli della mia situazione:
Abbiamo un mucchio di documenti XML conformi allo stesso DTD che sono generati da più sistemi differenti (nessuno dei quali posso cambiare). Alcuni di questi sistemi aggiungono un doctype ai loro documenti di output, altri no. Alcuni usano entità di carattere nominate, altre no. Alcuni usano entità di carattere denominate senza dichiarare un doctype. So che non è kosher, ma è quello con cui devo lavorare.
Sto lavorando al sistema che deve analizzare questi file in Java. Attualmente, gestisce i casi di cui sopra leggendo prima il documento XML come uno stream, tentando di rilevare se ha un doctype definito e aggiungendo una dichiarazione doctype se uno non è già presente. Il problema è che questo codice è bacato e mi piacerebbe sostituirlo con qualcosa di più pulito.
I file sono grandi, quindi Non è possibile utilizzare una soluzione basata su DOM. Sto anche cercando di risolvere le entità dei caratteri, quindi non aiuta a utilizzare uno schema XML.
Se si dispone di una soluzione, si prega di postarlo direttamente invece di collegarlo ad esso? Non fa molto bene lo Stack Overflow se in un futuro c'è una soluzione corretta con un link morto.