XMLFilter Example
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.*;
import java.io.IOException;
public class UnparsedTextFilter extends XMLFilterImpl {
private TextEntityReplacer replacer;
public UnparsedTextFilter(XMLReader parent) {
super(parent);
}
public void parse(InputSource input)
throws IOException, SAXException {
System.out.println("parsing");
replacer = new TextEntityReplacer(input.getPublicId(),
input.getSystemId());
this.setDTDHandler(replacer);
this.setContentHandler(this);
}
// The other parse() method just calls this one
public void parse(String systemId)
throws IOException, SAXException {
parse(new InputSource(systemId));
}
public void startElement(String uri, String localName,
String qualifiedName, Attributes attributes) throws SAXException {
System.out.println("startElement");
Vector extraText = new Vector();
// Are there any unparsed entities in the attributes?
for (int i = 0; i < attributes.getLength(); i++) {
if (attributes.getType(i).equals("ENTITY")) {
try {
System.out.println("replacing");
String s = replacer.getText(attributes.getValue(i));
if (s != null) extraText.addElement(s);
}
catch (IOException e) {
System.err.println(e);
}
}
}
super.startElement(uri, localName, qualifiedName, attributes);
// Now spew out the values of the unparsed entities:
Enumeration e = extraText.elements();
while (e.hasMoreElements()) {
Object o = e.nextElement();
String s = (String) o;
super.characters(s.toCharArray(), 0, s.length());
}
}
}