1 57 58 package dom; 59 60 import org.w3c.dom.Attr ; 61 import org.w3c.dom.Document ; 62 import org.w3c.dom.Element ; 63 import org.w3c.dom.NamedNodeMap ; 64 import org.w3c.dom.NodeList ; 65 66 import util.Arguments; 67 68 69 76 public class DOMFilter { 77 78 82 83 private static final String 84 DEFAULT_PARSER_NAME = "dom.wrappers.DOMParser"; 85 86 private static boolean setValidation = false; private static boolean setNameSpaces = true; 88 private static boolean setSchemaSupport = true; 89 private static boolean setSchemaFullSupport = false; 90 private static boolean setDeferredDOM = true; 91 92 93 94 98 99 public static void print(String parserWrapperName, String uri, 100 String elementName, String attributeName) { 101 102 try { 103 DOMParserWrapper parser = 105 (DOMParserWrapper)Class.forName(parserWrapperName).newInstance(); 106 107 parser.setFeature( "http://apache.org/xml/features/dom/defer-node-expansion", 108 setDeferredDOM ); 109 parser.setFeature( "http://xml.org/sax/features/validation", 110 setValidation ); 111 parser.setFeature( "http://xml.org/sax/features/namespaces", 112 setNameSpaces ); 113 parser.setFeature( "http://apache.org/xml/features/validation/schema", 114 setSchemaSupport ); 115 parser.setFeature( "http://apache.org/xml/features/validation/schema-full-checking", 116 setSchemaFullSupport ); 117 118 119 Document document = parser.parse(uri); 120 121 NodeList elements = document.getElementsByTagName(elementName); 123 124 print(elements, attributeName); 126 } catch (Exception e) { 127 e.printStackTrace(System.err); 128 } 129 130 } 132 136 141 private static void print(NodeList elements, String attributeName) { 142 143 if (elements == null) { 145 return; 146 } 147 148 if (attributeName == null) { 150 int elementCount = elements.getLength(); 151 for (int i = 0; i < elementCount; i++) { 152 Element element = (Element )elements.item(i); 153 print(element, element.getAttributes()); 154 } 155 } 156 157 else { 159 int elementCount = elements.getLength(); 160 for (int i = 0; i < elementCount; i++) { 161 Element element = (Element )elements.item(i); 162 NamedNodeMap attributes = element.getAttributes(); 163 if (attributes.getNamedItem(attributeName) != null) { 164 print(element, attributes); 165 } 166 } 167 } 168 169 } 171 172 private static void print(Element element, NamedNodeMap attributes) { 173 174 System.out.print('<'); 175 System.out.print(element.getNodeName()); 176 if (attributes != null) { 177 int attributeCount = attributes.getLength(); 178 for (int i = 0; i < attributeCount; i++) { 179 Attr attribute = (Attr )attributes.item(i); 180 System.out.print(' '); 181 System.out.print(attribute.getNodeName()); 182 System.out.print("=\""); 183 System.out.print(normalize(attribute.getNodeValue())); 184 System.out.print('"'); 185 } 186 } 187 System.out.println('>'); 188 189 } 191 192 private static String normalize(String s) { 193 StringBuffer str = new StringBuffer (); 194 195 int len = (s != null) ? s.length() : 0; 196 for (int i = 0; i < len; i++) { 197 char ch = s.charAt(i); 198 switch (ch) { 199 case '<': { 200 str.append("<"); 201 break; 202 } 203 case '>': { 204 str.append(">"); 205 break; 206 } 207 case '&': { 208 str.append("&"); 209 break; 210 } 211 case '"': { 212 str.append("""); 213 break; 214 } 215 case '\r': 216 case '\n': { 217 str.append("&#"); 218 str.append(Integer.toString(ch)); 219 str.append(';'); 220 break; 221 } 222 default: { 223 str.append(ch); 224 } 225 } 226 } 227 228 return str.toString(); 229 230 } 232 236 237 public static void main(String argv[]) { 238 239 Arguments argopt = new Arguments(); 240 argopt.setUsage( new String [] 241 { "usage: java dom.DOMFilter (options) uri ...","", 242 "options:", 243 " -p name Specify DOM parser wrapper by name.", 244 " -e name Specify element name to search for. Default is \"*\".", 245 " -a name Specify attribute name of specified elements.", 246 " -p name Specify DOM parser wrapper by name.", 247 " -n | -N Turn on/off namespace [default=on]", 248 " -v | -V Turn on/off validation [default=on]", 249 " -s | -S Turn on/off Schema support [default=on]", 250 " -f | -F Turn on/off Schema full consraint checking [default=off]", 251 " -d | -D Turn on/off deferred DOM [default=on]", 252 " -h This help screen."} ); 253 254 if (argv.length == 0) { 256 argopt.printUsage(); 257 System.exit(1); 258 } 259 260 String parserName = DEFAULT_PARSER_NAME; 262 String elementName = "*"; String attributeName = null; 264 265 266 268 argopt.parseArgumentTokens(argv , new char[] { 'p', 'e', 'a'} ); 269 int c; 270 String arg = null; 271 while ( ( arg = argopt.getlistFiles() ) != null ) { 272 outer: 273 while ( (c = argopt.getArguments()) != -1 ){ 274 switch (c) { 275 case 'v': 276 setValidation = true; 277 break; 278 case 'V': 279 setValidation = false; 280 break; 281 case 'N': 282 setNameSpaces = false; 283 break; 284 case 'n': 285 setNameSpaces = true; 286 break; 287 case 'p': 288 parserName = argopt.getStringParameter(); 289 break; 290 case 'd': 291 setDeferredDOM = true; 292 break; 293 case 'D': 294 setDeferredDOM = false; 295 break; 296 case 's': 297 setSchemaSupport = true; 298 break; 299 case 'S': 300 setSchemaSupport = false; 301 break; 302 case 'e': 303 elementName = argopt.getStringParameter(); 304 break; 305 case 'a': 306 attributeName = argopt.getStringParameter(); 307 break; 308 case 'f': 309 setSchemaFullSupport = true; 310 break; 311 case 'F': 312 setSchemaFullSupport = false; 313 break; 314 case '?': 315 case 'h': 316 case '-': 317 argopt.printUsage(); 318 System.exit(1); 319 break; 320 case -1: 321 break outer; 322 default: 323 break; 324 } 325 } 326 System.err.println(arg+':'); 328 print(parserName, arg, elementName, attributeName); 329 } 330 } 332 } 334 | Popular Tags |