/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package feuille.lib; import java.io.File; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; 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; /** * * @author The Wingate 2940 */ public class XmlLangHandler { LangHandler lh; public XmlLangHandler(String path) throws ParserConfigurationException, SAXException, IOException{ SAXParserFactory fabrique = SAXParserFactory.newInstance(); SAXParser parseur = fabrique.newSAXParser(); File fichier = new File(path); lh = new LangHandler(); parseur.parse(fichier, lh); } public Map<String, String> getLangMap(){ return lh.getLangMap(); } public class LangHandler extends DefaultHandler{ //résultats de notre parsing private Map<String, String> myMap; String key, value; //flags nous indiquant la position du parseur private boolean inSheet, inLang, inKey, inValue; //buffer nous permettant de récupérer les données private StringBuffer buffer; public LangHandler(){ super(); } public Map<String, String> getLangMap(){ return myMap; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{ if(qName.equals("sheet")){ myMap = new LinkedHashMap<String, String>(); inSheet = true; }else if(qName.equals("lang")){ inLang = true; }else { buffer = new StringBuffer(); if(qName.equals("key")){ inKey = true; }else if(qName.equals("value")){ inValue = true; }else{ //Rien } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException{ if(qName.equals("sheet")){ inSheet = false; }else if(qName.equals("lang")){ myMap.put(key, value); key = null; value = null; inLang = false; }else if(qName.equals("key")){ key = buffer.toString(); buffer = null; inKey = false; }else if(qName.equals("value")){ value = buffer.toString(); buffer = null; inValue = false; }else{ //Rien } } //détection de caractères @Override public void characters(char[] ch,int start, int length) throws SAXException{ String lecture = new String(ch,start,length); if(buffer != null) buffer.append(lecture); } //début du parsing @Override public void startDocument() throws SAXException { //System.out.println("Début du parsing"); } //fin du parsing @Override public void endDocument() throws SAXException { //System.out.println("Fin du parsing"); //System.out.println("Resultats du parsing"); //Résultats } } }