Je dois lire et écrire à partir et à destination d'un XML dossier. Quel est le moyen le plus simple de lire et d'écrire des fichiers XML en utilisant Java ?
Réponse
Trop de publicités?SAX
fonctionne différemment avec un DOM
l'analyseur ne charge aucun XML
dans la mémoire, ni créer une représentation objet de l'ensemble du document. XML
document. Au lieu de cela, le SAX
fonction de rappel de l'analyseur syntaxique org.xml.sax.helpers.DefaultHandler
pour informer les clients de la XML
la structure du document.
SAX
L'analyseur est plus rapide et utilise moins de mémoire que DOM
parser. Voir ci-dessous SAX
méthodes de rappel :
startDocument()
et endDocument()
- Méthode appelée au début et à la fin d'un document XML. startElement()
et endElement()
- Méthode appelée au début et à la fin d'un élément de document. characters()
- Méthode appelée avec le contenu du texte entre les balises de début et de fin d'un élément de document XML.
- Fichier XML
Créez un simple fichier XML.
<?xml version="1.0"?>
<company>
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
- Analyseur XML :
Fichier Java Utilisez l'analyseur SAX pour analyser le fichier XML.
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ReadXMLFile {
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
System.out.println("End Element :" + qName);
}
public void characters(char ch[], int start, int length) throws SAXException {
if (bfname) {
System.out.println("First Name : " + new String(ch, start, length));
bfname = false;
}
if (blname) {
System.out.println("Last Name : " + new String(ch, start, length));
blname = false;
}
if (bnname) {
System.out.println("Nick Name : " + new String(ch, start, length));
bnname = false;
}
if (bsalary) {
System.out.println("Salary : " + new String(ch, start, length));
bsalary = false;
}
}
};
saxParser.parse("c:\\file.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
Élément de départ : entreprise
Élément de départ : personnel
Élément de départ : prénom
Prénom : yong
Fin de l'élément :firstname
Élément de départ :lastname
Nom de famille : mook kim
Fin de l'élément :lastname
Début de l'élément :nickname
Pseudonyme : mkyong
Fin de l'élément :nickname
et ainsi de suite...
Source(MyKong) - http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
- Réponses précédentes
- Plus de réponses
0 votes
Analyse syntaxique partielle de xml efficace en mémoire via StAX : stackoverflow.com/questions/52614082/