2010-08-17 8 views
8

Ich möchte ein wohlgeformtes XML in ein DOM parsen, aber ich möchte den Offset des Knotennamens in den Originalmedien kennen.Java-XML-Parsing und Original-Byte-Offsets

Zum Beispiel, wenn ich ein XML-Dokument mit dem Inhalt etwas wie gehabt:

<html> 
<body> 
<div>text</div> 
</body> 
</html> 

Ich mag wissen, dass der Knoten bei 13 Offset beginnt in den Originalmedium und (noch wichtiger), dass "Text" beginnt bei Offset 18.

Ist dies mit Standard-Java-XML-Parsern möglich? JAXB? Wenn keine Lösung leicht verfügbar ist, welche Art von Änderungen sind entlang des Parsing-Pfades notwendig, um dies zu ermöglichen?

+0

Werfen Sie einen Blick auf diese Frage http://StackOverflow.com/Questions/43366566, um Zeichen Offsets in großen XML-Dateien zu finden und wie mit JAXB zu verwenden. – jschnasse

Antwort

4

Die SAX-API bietet dafür einen eher obskuren Mechanismus - die org.xml.sax.Locator Schnittstelle. Wenn Sie die SAX-API verwenden, unterteilen Sie die Klasse DefaultHandler und übergeben diese an die SAX-Analyseverfahren, und die SAX-Parserimplementierung soll Locator in Ihre DefaultHandler über setDocumentLocator() einspeisen. Da die Analyse fortschreitet, werden die verschiedenen Callback-Methoden auf Ihrem ContentHandler aufgerufen (zB startElement()), an welcher Stelle Sie die Locator konsultieren können die Parsing-Position, um herauszufinden, (via getColumnNumber() und getLineNumber())

Technisch ist diese optionale Funktionalität ist, aber das Javadoc sagt, dass Implementierungen "stark ermutigt" sind, es zu liefern, also können Sie wahrscheinlich annehmen, dass der SAX-Parser, der in JavaSE eingebaut ist, es tut.

Natürlich bedeutet dies die Verwendung der SAX-API, die keine Idee von Spaß ist, aber ich sehe keine Möglichkeit, auf diese Informationen zuzugreifen, indem ich eine API auf höherer Ebene verwende.

bearbeiten: Gefunden this example.

1

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

Verwandte Themen