1 46 package groovy.xml; 47 48 import groovy.util.BuilderSupport; 49 50 import java.util.Iterator ; 51 import java.util.Map ; 52 53 import org.xml.sax.Attributes ; 54 import org.xml.sax.ContentHandler ; 55 import org.xml.sax.SAXException ; 56 import org.xml.sax.helpers.AttributesImpl ; 57 58 64 public class SAXBuilder extends BuilderSupport { 65 66 private ContentHandler handler; 67 private Attributes emptyAttributes = new AttributesImpl (); 68 69 public SAXBuilder(ContentHandler handler) { 70 this.handler = handler; 71 } 72 73 protected void setParent(Object parent, Object child) { 74 } 75 76 protected Object createNode(Object name) { 77 doStartElement(name, emptyAttributes); 78 return name; 79 } 80 81 protected Object createNode(Object name, Object value) { 82 doStartElement(name, emptyAttributes); 83 doText(value); 84 return name; 85 } 86 87 90 private void doText(Object value) { 91 try { 92 char[] text = value.toString().toCharArray(); 93 handler.characters(text, 0, text.length); 94 } 95 catch (SAXException e) { 96 handleException(e); 97 } 98 } 99 100 protected Object createNode(Object name, Map attributeMap, Object text) { 101 AttributesImpl attributes = new AttributesImpl (); 102 for (Iterator iter = attributeMap.entrySet().iterator(); iter.hasNext();) { 103 Map.Entry entry = (Map.Entry ) iter.next(); 104 Object key = entry.getKey(); 105 Object value = entry.getValue(); 106 String uri = ""; 107 String localName = null; 108 String qualifiedName = ""; 109 String valueText = (value != null) ? value.toString() : ""; 110 if (key instanceof QName) { 111 QName qname = (QName) key; 112 uri = qname.getNamespaceURI(); 113 localName = qname.getLocalPart(); 114 qualifiedName = qname.getQualifiedName(); 115 } 116 else { 117 localName = key.toString(); 118 qualifiedName = localName; 119 } 120 121 attributes.addAttribute(uri, localName, qualifiedName, "CDATA", valueText); 122 } 123 doStartElement(name, attributes); 124 if (text != null) { 125 doText(text); 126 } 127 return name; 128 } 129 130 protected void doStartElement(Object name, Attributes attributes) { 131 String uri = ""; 132 String localName = null; 133 String qualifiedName = ""; 134 if (name instanceof QName) { 135 QName qname = (QName) name; 136 uri = qname.getNamespaceURI(); 137 localName = qname.getLocalPart(); 138 qualifiedName = qname.getQualifiedName(); 139 } 140 else { 141 localName = name.toString(); 142 qualifiedName = localName; 143 } 144 try { 145 handler.startElement(uri, localName, qualifiedName, attributes); 146 } 147 catch (SAXException e) { 148 handleException(e); 149 } 150 } 151 152 protected void nodeCompleted(Object parent, Object name) { 153 String uri = ""; 154 String localName = null; 155 String qualifiedName = ""; 156 if (name instanceof QName) { 157 QName qname = (QName) name; 158 uri = qname.getNamespaceURI(); 159 localName = qname.getLocalPart(); 160 qualifiedName = qname.getQualifiedName(); 161 } 162 else { 163 localName = name.toString(); 164 qualifiedName = localName; 165 } 166 try { 167 handler.endElement(uri, localName, qualifiedName); 168 } 169 catch (SAXException e) { 170 handleException(e); 171 } 172 } 173 174 protected void handleException(SAXException e) { 175 throw new RuntimeException (e); 176 } 177 178 181 protected Object createNode(Object name, Map attributes) { 182 return createNode(name, attributes, null); 183 } 184 } 185 | Popular Tags |