ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/XMLPacketMaker.java
Revision: 1.8
Committed: Tue Nov 14 12:23:17 2000 UTC (24 years ago) by pjm2
Branch: MAIN
Changes since 1.7: +23 -55 lines
Log Message:
Updated the test.xml file to contain slightly more realistic data ;-)

The XMLPacketMaker main method now handles attributes within XML opening
tags.  Read the comments in the file to see how these are dealt with.  Go
on, you know you want to.

File Contents

# Content
1 import java.io.*;
2 import java.util.ArrayList;
3
4 import org.xml.sax.*;
5
6 import javax.xml.parsers.SAXParserFactory;
7 import javax.xml.parsers.ParserConfigurationException;
8 import javax.xml.parsers.SAXParser;
9
10 // Paul Mutton, pjm2@ukc.ac.uk
11
12 // XMLPacketMaker - Creates an XMLPacket object.
13 public class XMLPacketMaker extends HandlerBase {
14
15 public XMLPacketMaker () {
16 // default no-args constructor.
17 }
18
19 // Constructor for accepting a reference to an XMLPacket
20 public XMLPacketMaker (XMLPacket packet) {
21 this.packet = packet;
22 }
23
24 public static void main(String[] args){
25 if (args.length != 1) {
26 System.err.println ("Usage: cmd filename");
27 System.exit (1);
28 }
29
30 // Use the default (non-validating) parser
31 SAXParserFactory factory = SAXParserFactory.newInstance();
32 try {
33 // Set up output stream
34 out = new OutputStreamWriter (System.out, "UTF8");
35
36 // Create the XMLPacket to store values in.
37 packet = new XMLPacket();
38
39 // Parse the input
40 SAXParser saxParser = factory.newSAXParser();
41 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42
43 // Print out the entire contents of the packet's HashMap.
44 System.out.println("XMLPacket contents: -");
45 packet.printAll();
46
47 } catch (Throwable t) {
48 t.printStackTrace ();
49 }
50 System.exit (0);
51 }
52
53 static private Writer out;
54 private String indentString = " "; // Amount to indent
55 private int indentLevel = 0;
56
57 // For storing the tag heirarchy.
58 private ArrayList tagList = new ArrayList();
59 static private XMLPacket packet = null;
60
61 //===========================================================
62 // SAX DocumentHandler methods
63 //===========================================================
64
65 public void startDocument () throws SAXException {
66 // No purpose currently.
67 }
68
69 public void endDocument () throws SAXException {
70 // No purpose currently.
71 }
72
73 // Add each tag's attribute to the XMLPacket.
74 // Note that all attributes within an opening tag are
75 // stored as "someroot.sometag.attributes.attribute_name"
76 // E.g. If <packet> is the root node, then:
77 // <packet machine_name="raptor">
78 // is stored as:
79 // "packet.attributes.machine_name"
80 // within the XMLPacket.
81 public void startElement (String name, AttributeList attrs) throws SAXException {
82 indentLevel++;
83 tagList.add(name);
84 if (attrs != null) {
85 for (int i = 0; i < attrs.getLength (); i++) {
86 packet.addParam(getPath()+".attributes."+attrs.getName(i), attrs.getValue(i));
87 }
88 }
89 }
90
91 // When an XML element is finished with, we must remove
92 // the tag name from the tagList and decrement the indent
93 // level.
94 public void endElement (String name) throws SAXException {
95 tagList.remove(tagList.size()-1);
96 indentLevel--;
97 }
98
99 // Any text falling within a pair of terminal tags must
100 // be added to the XMLPacket. Trim leading and trailing
101 // spaces and do not bother to add if there is no data
102 // specified within the tags.
103 public void characters (char[] buf, int offset, int len) throws SAXException {
104 String s = new String(buf, offset, len);
105 if (!s.trim().equals("")) {
106 packet.addParam(getPath(), s);
107 }
108 }
109
110
111 //===========================================================
112 // Helpers ...
113 //===========================================================
114
115
116 // Return the heirarchical string to be used as a key value
117 // in the XMLPacket.
118 private String getPath () {
119 String path = (String)tagList.get(0);
120 if (tagList.size() > 0) {
121 for (int i = 1 ; i < tagList.size() ; i++) {
122 path = path + "." + (String)tagList.get(i);
123 }
124 }
125 return path;
126 }
127
128 }