Wie kann ich einen SAX-Parser (speziell Xerces in Java) zwingen, eine DTD zu verwenden, wenn ein Dokument ohne beliebigen Doctype im Eingabedokument analysiert wird? Ist das überhaupt möglich?Wie kann ich einen SAX-Parser zwingen, eine DTD zu verwenden, wenn keine in der Eingabedatei angegeben ist?
Hier sind einige weitere Details meiner Szenario:
Wir haben eine Reihe von XML-Dokumenten, die mit der gleichen DTD entsprechen, die von mehreren verschiedenen Systemen (von denen keine die ich ändern kann) erzeugt werden. Einige dieser Systeme fügen ihren Ausgabedokumenten einen Doctype hinzu, andere nicht. Einige verwenden benannte Zeichenentitäten, andere nicht. Einige verwenden benannte Zeichenentitäten, ohne einen Doctype zu deklarieren. Ich weiß, dass das nicht koscher ist, aber ich muss damit arbeiten.
Ich arbeite an einem System, das diese Dateien in Java analysieren muss. Momentan behandelt es die obigen Fälle, indem es zuerst das XML-Dokument als Stream liest, versucht, zu erkennen, ob es einen Doctype definiert hat, und eine Doctype-Deklaration hinzufügt, falls noch keine vorhanden ist. Das Problem ist, dass dieser Code fehlerhaft ist, und ich möchte ihn durch etwas saubereres ersetzen.
Die Dateien sind groß, so Ich kann keine DOM-basierte Lösung verwenden. Ich versuche auch, Zeichenentitäten aufgelöst zu bekommen, so dass es nicht hilft ein XML-Schema zu verwenden.
Wenn Sie eine Lösung haben, können Sie sie bitte direkt posten, anstatt sie zu verknüpfen? Es tut Stack Overflow nicht gut, wenn es in der Zukunft eine korrekte Lösung mit einem toten Link gibt.