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 (24 years 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

# User Rev Content
1 pjm2 1.3 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 pjm2 1.5
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 pjm2 1.3 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 pjm2 1.5 // Create the XMLPacket to store values in.
35     packet = new XMLPacket();
36    
37 pjm2 1.3 // Parse the input
38     SAXParser saxParser = factory.newSAXParser();
39 pjm2 1.5 saxParser.parse(new File(args[0]), new XMLPacketMaker(packet));
40    
41     // Print out some things from the packet: -
42 pjm2 1.6 System.out.println("bung.wibble="+packet.getParam("bung.wibble"));
43     System.out.println("bung.ping.value1="+packet.getParam("bung.ping.value1"));
44 pjm2 1.5
45 pjm2 1.3
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 pjm2 1.4 // For storing the tag heirarchy.
57 pjm2 1.3 private ArrayList tagList = new ArrayList();
58 pjm2 1.5 static private XMLPacket packet = null;
59 pjm2 1.3
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 pjm2 1.5 tagList.add(name);
85 pjm2 1.3 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 pjm2 1.5 tagList.remove(tagList.size()-1);
106 pjm2 1.3 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 pjm2 1.5 if (!s.trim().equals("")) {
113     emit (s);
114 pjm2 1.6 packet.addParam(getPath(), s);
115 pjm2 1.5 }
116 pjm2 1.3 }
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 pjm2 1.6 }
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 pjm2 1.3 }
154     }