复制代码代码如下 :
paquet com.test;
importer java.io.File ;
importer java.io.FileInputStream ;
importer java.util.ArrayList ;
importer java.util.List ;
importer javax.xml.parsers.SAXParser ;
importer javax.xml.parsers.SAXParserFactory ;
importer org.xml.sax.Attributes ;
importer org.xml.sax.SAXException ;
importer org.xml.sax.helpers.DefaultHandler ;
classe publique SaxXML {
public static void main (String[] arguments) {
Fichier file = new File("e:/People.xml");
essayer {
SAXParserFactory spf = SAXParserFactory.newInstance();
analyseur SAXParser = spf.newSAXParser();
Gestionnaire SaxHandler = new SaxHandler("Personnes");
parser.parse (nouveau FileInputStream (fichier), gestionnaire);
List<Personnes> peopleList = handler.getPeoples();
pour (Personnes personnes : personnesListe){
System.out.println(people.getId()+"/t"+people.getName()+"/t"+people.getEnglishName()+"/t"+people.getAge());
}
} attraper (Exception e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
}
}
la classe SaxHandler étend DefaultHandler {
liste privée<Personnes> peoples = null;
personnes privées;
chaîne privée currentTag = null ;
chaîne privée valeur actuelle = null ;
chaîne privée nodeName = null ;
liste publique<Personnes> getPeoples() {
les peuples de retour ;
}
public SaxHandler (String nodeName) {
this.nodeName = nodeName;
}
@Outrepasser
public void startDocument() lance SAXException {
// TODO 当读到一个开始标签的时候,会触发这个方法
super.startDocument();
peoples = new ArrayList<People>();
}
@Outrepasser
public void endDocument() lance SAXException {
// TODO 自动生成的方法存根
super.endDocument();
}
@Outrepasser
public void startElement (String uri, String localName, String name,
Attributs attributs) lance SAXException {
// TODO 当遇到文档的开头的时候,调用这个方法
super.startElement(uri, localName, nom, attributs);
if (name.equals(nodeName)) {
personnes = nouvelles personnes ();
}
if (attributs != null && personnes != null) {
pour (int i = 0; i < attributs.getLength(); i++) {
if(attributes.getQName(i).equals("id")){
people.setId(attributes.getValue(i));
}
sinon if(attributes.getQName(i).equals("en")){
people.setEnglishName(attributes.getValue(i));
}
}
}
currentTag = nom ;
}
@Outrepasser
caractères publics vides (char[] ch, int start, int length)
lance SAXException {
// TODO 这个方法用来处理在XML文件中读到的内容
super.characters(ch, début, longueur);
if (currentTag != null && personnes != null) {
currentValue = new String(ch, début, longueur);
if (currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().equals("/n")) {
if(currentTag.equals("Nom")){
personnes.setName(currentValue);
}
sinon if(currentTag.equals("Age")){
people.setAge(currentValue);
}
}
}
baliseactuelle = null ;
valeuractuelle = null ;
}
@Outrepasser
public void endElement (String uri, String localName, String name)
lance SAXException {
// TODO 在遇到结束标签的时候,调用这个方法
super.endElement(uri, localName, nom);
if (name.equals(nodeName)) {
peuples.ajouter(personnes);
}
}
}