1 16 17 import org.apache.commons.digester.Digester; 18 import org.apache.commons.digester.Rule; 19 20 import java.util.List ; 21 import javax.xml.parsers.SAXParser ; 22 import org.xml.sax.XMLReader ; 23 import org.xml.sax.SAXException ; 24 import org.xml.sax.Attributes ; 25 26 34 35 public class MarkupDigester extends Digester { 36 37 38 public MarkupDigester() { 39 } 40 41 42 public MarkupDigester(SAXParser parser) { 43 super(parser); 44 } 45 46 47 public MarkupDigester(XMLReader reader) { 48 super(reader); 49 } 50 51 53 56 protected StringBuffer currTextSegment = new StringBuffer (); 57 58 68 public void characters(char buffer[], int start, int length) 69 throws SAXException { 70 71 super.characters(buffer, start, length); 72 currTextSegment.append(buffer, start, length); 73 } 74 75 88 89 public void startElement(String namespaceURI, String localName, 90 String qName, Attributes list) 91 throws SAXException { 92 93 handleTextSegments(); 94 95 currTextSegment.setLength(0); 99 100 super.startElement(namespaceURI, localName, qName, list); 101 } 102 103 115 public void endElement(String namespaceURI, String localName, 116 String qName) throws SAXException { 117 118 handleTextSegments(); 119 currTextSegment.setLength(0); 120 super.endElement(namespaceURI, localName, qName); 121 } 122 123 129 private void handleTextSegments() throws SAXException { 130 if (currTextSegment.length() > 0) { 131 String segment = currTextSegment.toString(); 132 List parentMatches = (List ) matches.peek(); 133 int len = parentMatches.size(); 134 for(int i=0; i<len; ++i) { 135 Rule r = (Rule) parentMatches.get(i); 136 if (r instanceof TextSegmentHandler) { 137 TextSegmentHandler h = (TextSegmentHandler) r; 138 try { 139 h.textSegment(segment); 140 } catch(Exception e) { 141 throw createSAXException(e); 142 } 143 } 144 } 145 } 146 } 147 } 148 | Popular Tags |