En fait Java prend en charge 4 méthodes d'analyse XML:
DOM Parser/Générateur: l'ensemble de La structure XML est chargé en mémoire et vous pouvez utiliser le bien connu les méthodes du DOM de travailler avec elle. DOM vous permet également de rédiger le document avec des transformations Xslt.
Exemple:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File("test.xml");
Document doc = builder.parse(file);
// Do something with the document here.
} catch (ParserConfigurationException e) {
} catch (SAXException e) {
} catch (IOException e) {
}
Analyseur SAX: Uniquement pour lire un document XML. L'analyseur Sax traverse le document et les appels de méthodes de rappel de l'utilisateur. Il existe des méthodes pour le début/la fin d'un document, élément et ainsi de suite. Elles sont définies dans org.xml.sax.Gestionnaire de contenu et il y a un vide de la classe helper DefaultHandler.
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
SAXParser saxParser = factory.newSAXParser();
File file = new File("test.xml");
saxParser.parse(file, new ElementHandler()); // specify handler
}
catch(ParserConfigurationException e1) {
}
catch(SAXException e1) {
}
catch(IOException e) {
}
StAx Lecteur/graveur: Cela fonctionne avec un datastream interface. Le programme demande à l'élément suivant quand il est prêt, tout comme un curseur/itérateur. Vous pouvez également créer des documents avec elle.
Lire le document:
FileInputStream fis = null;
try {
fis = new FileInputStream("test.xml");
XMLInputFactory xmlInFact = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInFact.createXMLStreamReader(fis);
while(reader.hasNext()) {
reader.next(); // do something here
}
}
catch(IOException exc) {
}
catch(XMLStreamException exc) {
}
Document d'écriture:
FileOutputStream fos = null;
try {
fos = new FileOutputStream("test.xml");
XMLOutputFactory xmlOutFact = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutFact.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("test");
// write stuff
writer.writeEndElement();
writer.flush();
}
catch(IOException exc) {
}
catch(XMLStreamException exc) {
}
finally {
}
JAXB: Le plus récent de la mise en œuvre de lire des documents XML: fait partie de la version 6 de Java dans la v2. Cela nous permet de sérialiser des objets java à partir d'un document. Vous lisez le document avec une classe qui implémente une interface javax.xml.bind.Unmarshaller (vous obtenez une classe de JAXBContext.newInstance). Le contexte doit être initialisé avec les classes utilisées, mais il vous suffit de spécifier la racine des classes et ne pas avoir à vous soucier de statique référencé classes.
Vous utilisez les annotations de spécifier les classes devraient être les éléments (@XmlRootElement) et les champs qui sont les éléments(@XmlElement) ou des attributs (@XmlAttribute, quelle surprise!)
RootElementClass adr = new RootElementClass();
FileInputStream adrFile = null;
try {
adrFile = new FileInputStream("test");
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Unmarshaller um = ctx.createUnmarshaller();
adr = (RootElementClass) um.unmarshal(adrFile);
}
catch(IOException exc) {
}
catch(JAXBException exc) {
}
finally {
}
Document d'écriture:
FileOutputStream adrFile = null;
try {
adrFile = new FileOutputStream("test.xml");
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Marshaller ma = ctx.createMarshaller();
ma.marshal(..);
}
catch(IOException exc) {
}
catch(JAXBException exc) {
}
finally {
}
Exemples copié sans vergogne de certains vieux conférence de diapositives ;-)
Edit: à Propos de "qui de l'API shoild-je utiliser?". Eh bien cela dépend - pas toutes les Api ont les mêmes capacités que vous voyez, mais si vous avez le contrôle sur les classes que vous utilisez à la carte le document XML JAXB est mon favori personnel, très élégant et simple de la solution (même si je ne l'ai pas utilisé pour les très gros documents, il pourrait obtenir un peu complexe). SAX est assez facile à utiliser et juste rester à l'écart de DOM si vous n'avez pas vraiment de bonne raison de l'utiliser - vieux, maladroit, API, à mon avis. Je ne pense pas que les modernes 3ème partie les bibliothèques qui disposent de quelque chose de particulièrement utile qui manque de la stl et les bibliothèques standard ont l'habitude des avantages d'être extrêmement bien testé, documenté et stable.