Ich möchte ein wohlgeformtes XML in ein DOM einlesen, aber ich würde gerne wissen, wie das Offset jedes Knotennamens auf dem Originalmedium ist.
Zum Beispiel, wenn ich ein XML-Dokument mit folgendem Inhalt hätte:
%Vor%Ich würde gerne wissen, dass der Knoten bei Offset 13 in den Originalmedien startet, und (noch wichtiger) dass "Text" bei Offset 18 beginnt.
Ist dies mit Standard-Java-XML-Parsern möglich? JAXB? Wenn keine Lösung leicht verfügbar ist, welche Art von Änderungen sind notwendig, um dies zu ermöglichen?
Die SAX-API bietet dafür einen eher obskuren Mechanismus - die org.xml.sax.Locator
Schnittstelle. Wenn Sie die SAX-API verwenden, bilden Sie die Unterklasse DefaultHandler
und übergeben diese an die SAX-Analyseverfahren, und die SAX-Parser-Implementierung soll% Locator
in Ihre DefaultHandler
via setDocumentLocator()
einfügen. Während des Parsens werden die verschiedenen Callback-Methoden auf Ihrem ContentHandler
aufgerufen (zB startElement()
). An diesem Punkt können Sie die Locator
konsultieren, um die Analyseposition herauszufinden (über getColumnNumber()
und getLineNumber()
)
Technisch gesehen ist dies eine optionale Funktionalität, aber das Javadoc sagt, dass Implementierungen "dringend empfohlen" sind, es bereitzustellen, so dass Sie wahrscheinlich davon ausgehen, dass der in JavaSE integrierte SAX-Parser das tut.
Natürlich bedeutet das die Verwendung der SAX-API, die keine Idee von Spaß ist, aber ich kann keine Möglichkeit sehen, auf diese Informationen mit einer übergeordneten API zuzugreifen.
edit: Gefunden dieses Beispiel .