Tatsächlich unterstützt Java 4 Methoden, um XML sofort zu analysieren:
DOM-Parser / Builder: Die gesamte XML-Struktur wird in den Speicher geladen, und Sie können die bekannten DOM-Methoden verwenden, um damit zu arbeiten. Mit DOM können Sie auch mit Xslt-Transformationen in das Dokument schreiben. Beispiel:
public static void parse() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File("test.xml");
Document doc = builder.parse(file);
// Do something with the document here.
}
SAX Parser: Nur zum Lesen eines XML-Dokuments. Der Sax-Parser durchläuft das Dokument und ruft die Rückrufmethoden des Benutzers auf. Es gibt Methoden zum Starten / Beenden eines Dokuments, Elements usw. Sie sind in org.xml.sax.ContentHandler definiert und es gibt eine leere Hilfsklasse DefaultHandler.
public static void parse() throws ParserConfigurationException, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser saxParser = factory.newSAXParser();
File file = new File("test.xml");
saxParser.parse(file, new ElementHandler()); // specify handler
}
StAx Reader / Writer: Dies funktioniert mit einer datenstromorientierten Schnittstelle. Das Programm fragt nach dem nächsten Element, wenn es wie ein Cursor / Iterator bereit ist. Sie können damit auch Dokumente erstellen. Dokument lesen:
public static void parse() throws XMLStreamException, IOException {
try (FileInputStream fis = new FileInputStream("test.xml")) {
XMLInputFactory xmlInFact = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInFact.createXMLStreamReader(fis);
while(reader.hasNext()) {
reader.next(); // do something here
}
}
}
Dokument schreiben:
public static void parse() throws XMLStreamException, IOException {
try (FileOutputStream fos = new FileOutputStream("test.xml")){
XMLOutputFactory xmlOutFact = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutFact.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("test");
// write stuff
writer.writeEndElement();
}
}
JAXB: Die neueste Implementierung zum Lesen von XML-Dokumenten: Ist Teil von Java 6 in Version 2. Auf diese Weise können wir Java-Objekte aus einem Dokument serialisieren. Sie lesen das Dokument mit einer Klasse, die eine Schnittstelle zu javax.xml.bind.Unmarshaller implementiert (eine Klasse hierfür erhalten Sie von JAXBContext.newInstance). Der Kontext muss mit den verwendeten Klassen initialisiert werden, aber Sie müssen nur die Stammklassen angeben und müssen sich nicht um statisch referenzierte Klassen kümmern. Sie verwenden Anmerkungen, um anzugeben, welche Klassen Elemente (@XmlRootElement) und welche Felder Elemente (@XmlElement) oder Attribute (@XmlAttribute, was für eine Überraschung!) Sein sollen.
public static void parse() throws JAXBException, IOException {
try (FileInputStream adrFile = new FileInputStream("test")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Unmarshaller um = ctx.createUnmarshaller();
RootElementClass rootElement = (RootElementClass) um.unmarshal(adrFile);
}
}
Dokument schreiben:
public static void parse(RootElementClass out) throws IOException, JAXBException {
try (FileOutputStream adrFile = new FileOutputStream("test.xml")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Marshaller ma = ctx.createMarshaller();
ma.marshal(out, adrFile);
}
}
Beispiele schamlos kopiert von einigen alten Vorlesungsfolien ;-)
Bearbeiten: Über "Welche API soll ich verwenden?". Nun, es kommt darauf an - nicht alle APIs haben die gleichen Funktionen wie Sie sehen, aber wenn Sie die Kontrolle über die Klassen haben, die Sie zum Zuordnen des XML-Dokuments verwenden, ist JAXB meine persönliche Lieblingslösung, wirklich elegant und einfach (obwohl ich sie nicht verwendet habe) wirklich große Dokumente, es könnte etwas komplex werden). SAX ist auch ziemlich einfach zu bedienen und halten Sie sich einfach von DOM fern, wenn Sie keinen wirklich guten Grund haben, es zu verwenden - meiner Meinung nach alte, klobige API. Ich glaube nicht, dass es moderne Bibliotheken von Drittanbietern gibt, die etwas besonders Nützliches enthalten, das in der STL fehlt, und die Standardbibliotheken haben die üblichen Vorteile, extrem gut getestet, dokumentiert und stabil zu sein.