Java-XML-Parsing und ursprüngliche Byte-Offsets

8

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?

    
Bill Dwyer 17.08.2010, 22:05
quelle

2 Antworten

4

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 .

    
skaffman 17.08.2010 22:24
quelle
1

Verwenden Sie den XML Streamreader und seine Methode getLocation (), um das Standortobjekt zurückzugeben. location.getCharacterOffset () gibt den Byte-Offset des aktuellen Standorts an.

%Vor%     
Lucasvw 30.10.2014 12:08
quelle

Tags und Links