package fr.crim.a2012.saxigraph; import java.util.Enumeration; import java.util.Hashtable; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class SAXWordCount extends DefaultHandler { private Hashtable<String,Integer> tags; private StringBuilder text=new StringBuilder(); /** * Ajoute du texte à la variable d'instance * Attention, si rien n'est fait à l'ouverture et à la femeture * d'éléments, cette variable contiendra tout le texte du fichier * (sans balises) */ public void characters(char ch[], int start, int length){ text.append(ch, start, length); } @Override public void startDocument() throws SAXException { tags = new Hashtable<String,Integer>(); } @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { String key = localName; Object value = tags.get(key); if (value == null) { tags.put(key, new Integer(1)); } else { int count = ((Integer) value).intValue(); count++; tags.put(key, new Integer(count)); } } @Override public void endDocument() throws SAXException { System.out.println(text); /* Enumeration<String> e = tags.keys(); while (e.hasMoreElements()) { String tag = (String) e.nextElement(); int count = ((Integer) tags.get(tag)).intValue(); if(count>1)System.out.println("<" + tag + "> " + count ); } */ } static public void main(String[] args) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); SAXParser saxParser = spf.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SAXWordCount()); xmlReader.parse("rsc/monfichier.xml"); } }
Anonymous