ovidiu 02/01/18 16:58:12 Added: src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap XMLtoSXML.java Log: SAX ContentHandler for translating XML to SXML (Scheme XML representation). Revision Changes Path 1.1 xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap/XMLtoSXML.java Index: XMLtoSXML.java =================================================================== package org.apache.cocoon.scheme.sitemap; import org.apache.cocoon.xml.AbstractXMLConsumer; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; /** * SAX content handler for translating an XML document in the SXML * (Scheme XML) representation. * * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> * @since January 16, 2002 */ public class XMLtoSXML extends AbstractXMLConsumer { protected StringBuffer content = new StringBuffer(100000); Locator locator; public XMLtoSXML() {} public String getContent() { return content.toString(); } public void startDocument() throws SAXException { content.append("(quote "); } public void endDocument() throws SAXException { content.append(")"); } public void startElement(String uri, String loc, String qName, Attributes a) throws SAXException { content.append("(" + loc + " (@ "); for (int i = 0, size = a.getLength(); i < size; i++) { String attrName = a.getQName(i); if (!attrName.startsWith("xmlns:")) content.append("(" + attrName + " \"" + a.getValue(i) + "\") "); } content.append("(*line* " + locator.getLineNumber() + ") "); content.append(") "); } public void endElement(String uri, String loc, String raw) throws SAXException { content.append(") "); } public void characters(char ch[], int start, int len) throws SAXException { content.append(escape(ch, start, len)); } public void setDocumentLocator(Locator locator) { this.locator = locator; } /** * Escapes characters in <code>chars</code> as follows: * * <ul> * <li><pre>\ -> \\</pre></li> * <li><pre>" -> \"</pre></li> * </ul> * * @param chars a <code>char[]</code> value */ public static String escape(char[] chars, int start, int len) { if (chars == null) return ""; // Assume about 1% of the characters need to be escaped; probably // a safe bet in most cases. Otherwise the buffer is increased // automatically by the StringBuffer. StringBuffer escaped = new StringBuffer((int)(chars.length * 1.01)); for (int i = start; i < len; i++) { char ch = chars[i]; switch (ch) { case '\\': escaped.append("\\\\\\\\"); break; case '"': escaped.append("\\\\\""); break; default: escaped.append(ch); break; } } return escaped.toString(); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]