ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/XMLPacketMaker.java
Revision: 1.6
Committed: Tue Nov 14 10:15:54 2000 UTC (23 years, 5 months ago) by pjm2
Branch: MAIN
Changes since 1.5: +13 -1 lines
Log Message:
This version still contains a main method for testing purposes.
It works fine, creating an XMLPacket object.  Run with test.xml
and you will find that the HashMap stores values with a heirarchical
structure, such as bung.ping.value1="Can You".

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
11 public class XMLPacketMaker extends HandlerBase {
12
13 public XMLPacketMaker () {
14 // default no-args constructor.
15 }
16
17 // Constructor for accepting a reference to an XMLPacket
18 public XMLPacketMaker (XMLPacket packet) {
19 this.packet = packet;
20 }
21
22 public static void main(String[] args){
23 if (args.length != 1) {
24 System.err.println ("Usage: cmd filename");
25 System.exit (1);
26 }
27
28 // Use the default (non-validating) parser
29 SAXParserFactory factory = SAXParserFactory.newInstance();
30 try {
31 // Set up output stream
32 out = new OutputStreamWriter (System.out, "UTF8");
33
34 // Create the XMLPacket to store values in.
35 packet = new XMLPacket();
36
37 // Parse the input
38 SAXParser saxParser = factory.newSAXParser();
39 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
40
41 // Print out some things from the packet: -
42 System.out.println("bung.wibble="+packet.getParam("bung.wibble"));
43 System.out.println("bung.ping.value1="+packet.getParam("bung.ping.value1"));
44
45
46 } catch (Throwable t) {
47 t.printStackTrace ();
48 }
49 System.exit (0);
50 }
51
52 static private Writer out;
53 private String indentString = " "; // Amount to indent
54 private int indentLevel = 0;
55
56 // For storing the tag heirarchy.
57 private ArrayList tagList = new ArrayList();
58 static private XMLPacket packet = null;
59
60 //===========================================================
61 // SAX DocumentHandler methods
62 //===========================================================
63
64 public void startDocument () throws SAXException {
65 nl();
66 nl();
67 emit ("START DOCUMENT");
68 nl();
69 emit ("<?xml version='1.0' encoding='UTF-8'?>");
70 }
71
72 public void endDocument () throws SAXException {
73 nl(); emit ("END DOCUMENT");
74 try {
75 nl();
76 out.flush ();
77 } catch (IOException e) {
78 throw new SAXException ("I/O error", e);
79 }
80 }
81
82 public void startElement (String name, AttributeList attrs) throws SAXException {
83 indentLevel++;
84 tagList.add(name);
85 nl(); emit ("ELEMENT: ");
86 emit ("<"+name);
87 if (attrs != null) {
88 for (int i = 0; i < attrs.getLength (); i++) {
89 nl();
90 emit(" ATTR: ");
91 emit (attrs.getName (i));
92 emit ("\t\"");
93 emit (attrs.getValue (i));
94 emit ("\"");
95 }
96 }
97 if (attrs.getLength() > 0) nl();
98 emit (">");
99 }
100
101 public void endElement (String name) throws SAXException {
102 nl();
103 emit ("END_ELM: ");
104 emit ("</"+name+">");
105 tagList.remove(tagList.size()-1);
106 indentLevel--;
107 }
108
109 public void characters (char[] buf, int offset, int len) throws SAXException {
110 nl(); emit ("CHARS: ");
111 String s = new String(buf, offset, len);
112 if (!s.trim().equals("")) {
113 emit (s);
114 packet.addParam(getPath(), s);
115 }
116 }
117
118 //===========================================================
119 // Helpers ...
120 //===========================================================
121
122 // Wrap I/O exceptions in SAX exceptions, to
123 // suit handler signature requirements
124 private void emit (String s) throws SAXException {
125 try {
126 out.write (s);
127 out.flush ();
128 } catch (IOException e) {
129 throw new SAXException ("I/O error", e);
130 }
131 }
132
133 // Start a new line
134 // and indent the next line appropriately
135 private void nl () throws SAXException {
136 String lineEnd = System.getProperty("line.separator");
137 try {
138 out.write (lineEnd);
139 for (int i=0; i < indentLevel; i++) out.write(indentString);
140 } catch (IOException e) {
141 throw new SAXException ("I/O error", e);
142 }
143 }
144
145 private String getPath () {
146 String path = (String)tagList.get(0);
147 if (tagList.size() > 0) {
148 for (int i = 1 ; i < tagList.size() ; i++) {
149 path = path + "." + (String)tagList.get(i);
150 }
151 }
152 return path;
153 }
154 }