ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/XMLPacketMaker.java
Revision: 1.5
Committed: Tue Nov 14 10:04:01 2000 UTC (24 years ago) by pjm2
Branch: MAIN
Changes since 1.4: +24 -2 lines
Log Message:
Incorporated the XMLPacket features into the XMLPacketMaker class.
Now reads simple parameter values from XML into the hash map.

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    
43 pjm2 1.3
44     } catch (Throwable t) {
45     t.printStackTrace ();
46     }
47     System.exit (0);
48     }
49    
50     static private Writer out;
51     private String indentString = " "; // Amount to indent
52     private int indentLevel = 0;
53    
54 pjm2 1.4 // For storing the tag heirarchy.
55 pjm2 1.3 private ArrayList tagList = new ArrayList();
56 pjm2 1.5 static private XMLPacket packet = null;
57 pjm2 1.3
58     //===========================================================
59     // SAX DocumentHandler methods
60     //===========================================================
61    
62     public void startDocument () throws SAXException {
63     nl();
64     nl();
65     emit ("START DOCUMENT");
66     nl();
67     emit ("<?xml version='1.0' encoding='UTF-8'?>");
68     }
69    
70     public void endDocument () throws SAXException {
71     nl(); emit ("END DOCUMENT");
72     try {
73     nl();
74     out.flush ();
75     } catch (IOException e) {
76     throw new SAXException ("I/O error", e);
77     }
78     }
79    
80     public void startElement (String name, AttributeList attrs) throws SAXException {
81     indentLevel++;
82 pjm2 1.5 tagList.add(name);
83 pjm2 1.3 nl(); emit ("ELEMENT: ");
84     emit ("<"+name);
85     if (attrs != null) {
86     for (int i = 0; i < attrs.getLength (); i++) {
87     nl();
88     emit(" ATTR: ");
89     emit (attrs.getName (i));
90     emit ("\t\"");
91     emit (attrs.getValue (i));
92     emit ("\"");
93     }
94     }
95     if (attrs.getLength() > 0) nl();
96     emit (">");
97     }
98    
99     public void endElement (String name) throws SAXException {
100     nl();
101     emit ("END_ELM: ");
102     emit ("</"+name+">");
103 pjm2 1.5 tagList.remove(tagList.size()-1);
104 pjm2 1.3 indentLevel--;
105     }
106    
107     public void characters (char[] buf, int offset, int len) throws SAXException {
108     nl(); emit ("CHARS: ");
109     String s = new String(buf, offset, len);
110 pjm2 1.5 if (!s.trim().equals("")) {
111     emit (s);
112     packet.addParam((String)tagList.get(tagList.size()-1), s);
113     }
114 pjm2 1.3 }
115    
116     //===========================================================
117     // Helpers ...
118     //===========================================================
119    
120     // Wrap I/O exceptions in SAX exceptions, to
121     // suit handler signature requirements
122     private void emit (String s) throws SAXException {
123     try {
124     out.write (s);
125     out.flush ();
126     } catch (IOException e) {
127     throw new SAXException ("I/O error", e);
128     }
129     }
130    
131     // Start a new line
132     // and indent the next line appropriately
133     private void nl () throws SAXException {
134     String lineEnd = System.getProperty("line.separator");
135     try {
136     out.write (lineEnd);
137     for (int i=0; i < indentLevel; i++) out.write(indentString);
138     } catch (IOException e) {
139     throw new SAXException ("I/O error", e);
140     }
141     }
142     }