:::java
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