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

# User Rev Content
1 pjm2 1.3 import java.io.*;
2     import java.util.ArrayList;
3    
4     import org.xml.sax.*;
5    
6 pjm2 1.7 import javax.xml.parsers.SAXParserFactory;
7     import javax.xml.parsers.ParserConfigurationException;
8     import javax.xml.parsers.SAXParser;
9 pjm2 1.3
10 pjm2 1.7 // Paul Mutton, pjm2@ukc.ac.uk
11 pjm2 1.3
12 pjm2 1.7 // XMLPacketMaker - Creates an XMLPacket object.
13 pjm2 1.3 public class XMLPacketMaker extends HandlerBase {
14 pjm2 1.5
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 pjm2 1.3 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 pjm2 1.5 // Create the XMLPacket to store values in.
37     packet = new XMLPacket();
38    
39 pjm2 1.3 // Parse the input
40     SAXParser saxParser = factory.newSAXParser();
41 pjm2 1.5 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
42    
43 pjm2 1.8 // Print out the entire contents of the packet's HashMap.
44     System.out.println("XMLPacket contents: -");
45 pjm2 1.7 packet.printAll();
46 pjm2 1.3
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 pjm2 1.4 // For storing the tag heirarchy.
58 pjm2 1.3 private ArrayList tagList = new ArrayList();
59 pjm2 1.5 static private XMLPacket packet = null;
60 pjm2 1.3
61     //===========================================================
62     // SAX DocumentHandler methods
63     //===========================================================
64    
65     public void startDocument () throws SAXException {
66 pjm2 1.8 // No purpose currently.
67 pjm2 1.3 }
68    
69     public void endDocument () throws SAXException {
70 pjm2 1.8 // No purpose currently.
71 pjm2 1.3 }
72    
73 pjm2 1.8 // 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 pjm2 1.3 public void startElement (String name, AttributeList attrs) throws SAXException {
82     indentLevel++;
83 pjm2 1.5 tagList.add(name);
84 pjm2 1.3 if (attrs != null) {
85     for (int i = 0; i < attrs.getLength (); i++) {
86 pjm2 1.8 packet.addParam(getPath()+".attributes."+attrs.getName(i), attrs.getValue(i));
87 pjm2 1.3 }
88     }
89     }
90    
91 pjm2 1.8 // When an XML element is finished with, we must remove
92     // the tag name from the tagList and decrement the indent
93     // level.
94 pjm2 1.3 public void endElement (String name) throws SAXException {
95 pjm2 1.5 tagList.remove(tagList.size()-1);
96 pjm2 1.3 indentLevel--;
97     }
98    
99 pjm2 1.8 // 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 pjm2 1.3 public void characters (char[] buf, int offset, int len) throws SAXException {
104     String s = new String(buf, offset, len);
105 pjm2 1.5 if (!s.trim().equals("")) {
106 pjm2 1.6 packet.addParam(getPath(), s);
107 pjm2 1.5 }
108 pjm2 1.3 }
109    
110 pjm2 1.8
111 pjm2 1.3 //===========================================================
112     // Helpers ...
113     //===========================================================
114 pjm2 1.8
115 pjm2 1.6
116 pjm2 1.7 // Return the heirarchical string to be used as a key value
117     // in the XMLPacket.
118 pjm2 1.6 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 pjm2 1.3 }
127 pjm2 1.8
128 pjm2 1.3 }