|
Commons Digester example source code file (MarkupDigester.java)
The Commons Digester MarkupDigester.java source code/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.apache.commons.digester.Digester; import org.apache.commons.digester.Rule; import java.util.List; import javax.xml.parsers.SAXParser; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import org.xml.sax.Attributes; /** * This is a subclass of digester which supports rules which implement * the TextSegmentHandler interface, causing the "textSegment" method * on each matching rule (of the appropriate type) to be invoked when * an element contains a segment of text followed by a child element. * <p> * See the readme file included with this example for more information. */ public class MarkupDigester extends Digester { /** See equivalent constructor in Digester class. */ public MarkupDigester() { } /** See equivalent constructor in Digester class. */ public MarkupDigester(SAXParser parser) { super(parser); } /** See equivalent constructor in Digester class. */ public MarkupDigester(XMLReader reader) { super(reader); } //=================================================================== /** * The text found in the current element since the last child element. */ protected StringBuffer currTextSegment = new StringBuffer(); /** * Process notification of character data received from the body of * an XML element. * * @param buffer The characters from the XML document * @param start Starting offset into the buffer * @param length Number of characters from the buffer * * @exception SAXException if a parsing error is to be reported */ public void characters(char buffer[], int start, int length) throws SAXException { super.characters(buffer, start, length); currTextSegment.append(buffer, start, length); } /** * Process notification of the start of an XML element being reached. * * @param namespaceURI The Namespace URI, or the empty string if the element * has no Namespace URI or if Namespace processing is not being performed. * @param localName The local name (without prefix), or the empty * string if Namespace processing is not being performed. * @param qName The qualified name (with prefix), or the empty * string if qualified names are not available. * @param list The attributes attached to the element. If there are * no attributes, it shall be an empty Attributes object. * @exception SAXException if a parsing error is to be reported */ public void startElement(String namespaceURI, String localName, String qName, Attributes list) throws SAXException { handleTextSegments(); // Unlike bodyText, which accumulates despite intervening child // elements, currTextSegment gets cleared here. This means that // we don't need to save it on a stack either. currTextSegment.setLength(0); super.startElement(namespaceURI, localName, qName, list); } /** * Process notification of the end of an XML element being reached. * * @param namespaceURI - The Namespace URI, or the empty string if the * element has no Namespace URI or if Namespace processing is not * being performed. * @param localName - The local name (without prefix), or the empty * string if Namespace processing is not being performed. * @param qName - The qualified XML 1.0 name (with prefix), or the * empty string if qualified names are not available. * @exception SAXException if a parsing error is to be reported */ public void endElement(String namespaceURI, String localName, String qName) throws SAXException { handleTextSegments(); currTextSegment.setLength(0); super.endElement(namespaceURI, localName, qName); } /** * Iterate over the list of rules most recently matched, and * if any of them implement the TextSegmentHandler interface then * invoke that rule's textSegment method passing the current * segment of text from the xml element body. */ private void handleTextSegments() throws SAXException { if (currTextSegment.length() > 0) { String segment = currTextSegment.toString(); List parentMatches = (List) matches.peek(); int len = parentMatches.size(); for(int i=0; i<len; ++i) { Rule r = (Rule) parentMatches.get(i); if (r instanceof TextSegmentHandler) { TextSegmentHandler h = (TextSegmentHandler) r; try { h.textSegment(segment); } catch(Exception e) { throw createSAXException(e); } } } } } } Other Commons Digester examples (source code examples)Here is a short list of links related to this Commons Digester MarkupDigester.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.