KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > Roundtrip


1
2 //package org.xmlpull.v1.samples;
3

4 import java.io.*;
5
6 import org.xmlpull.v1.XmlPullParser;
7 import org.xmlpull.v1.XmlPullParserException;
8 import org.xmlpull.v1.XmlPullParserFactory;
9
10 import org.xmlpull.v1.XmlSerializer;
11
12 /**
13  * This sample demonstrates how to roundtrip XML document
14  * (roundtrip is not exact but infoset level)
15  */

16
17 public class Roundtrip {
18     //private static final String FEATURE_XML_ROUNDTRIP=
19
// "http://xmlpull.org/v1/doc/features.html#xml-roundtrip";
20
protected final static String JavaDoc PROPERTY_XMLDECL_STANDALONE =
21         "http://xmlpull.org/v1/doc/features.html#xmldecl-standalone";
22
23     XmlPullParser parser;
24     XmlSerializer serializer;
25
26     public Roundtrip (XmlPullParser parser, XmlSerializer serializer) {
27         this.parser = parser;
28         this.serializer = serializer;
29     }
30
31     public void writeStartTag () throws XmlPullParserException, IOException {
32         //check forcase when feature xml roundtrip is supported
33
//if (parser.getFeature (FEATURE_XML_ROUNDTRIP)) {
34
//TODO: how to do pass through string with actual start tag in getText()
35
//return;
36
//}
37
if (!parser.getFeature (parser.FEATURE_REPORT_NAMESPACE_ATTRIBUTES)) {
38             for (int i = parser.getNamespaceCount (parser.getDepth ()-1);
39                  i < parser.getNamespaceCount (parser.getDepth ())-1; i++) {
40                 serializer.setPrefix
41                     (parser.getNamespacePrefix (i),
42                      parser.getNamespaceUri (i));
43             }
44         }
45         serializer.startTag(parser.getNamespace (), parser.getName ());
46
47         for (int i = 0; i < parser.getAttributeCount (); i++) {
48             serializer.attribute
49                 (parser.getAttributeNamespace (i),
50                  parser.getAttributeName (i),
51                  parser.getAttributeValue (i));
52         }
53         //serializer.closeStartTag();
54
}
55
56
57     public void writeToken (int eventType) throws XmlPullParserException, IOException {
58         switch (eventType) {
59             case XmlPullParser.START_DOCUMENT:
60                 //use Boolean.TRUE to make it standalone
61
Boolean JavaDoc standalone = (Boolean JavaDoc) parser.getProperty(PROPERTY_XMLDECL_STANDALONE);
62                 serializer.startDocument(parser.getInputEncoding(), standalone);
63                 break;
64
65             case XmlPullParser.END_DOCUMENT:
66                 serializer.endDocument();
67                 break;
68
69             case XmlPullParser.START_TAG:
70                 writeStartTag ();
71                 break;
72
73             case XmlPullParser.END_TAG:
74                 serializer.endTag(parser.getNamespace (), parser.getName ());
75                 break;
76
77             case XmlPullParser.IGNORABLE_WHITESPACE:
78                 //comment it to remove ignorable whtespaces from XML infoset
79
String JavaDoc s = parser.getText ();
80                 serializer.ignorableWhitespace (s);
81                 break;
82
83             case XmlPullParser.TEXT:
84                 serializer.text (parser.getText ());
85                 break;
86
87             case XmlPullParser.ENTITY_REF:
88                 serializer.entityRef (parser.getName ());
89                 break;
90
91             case XmlPullParser.CDSECT:
92                 serializer.cdsect( parser.getText () );
93                 break;
94
95             case XmlPullParser.PROCESSING_INSTRUCTION:
96                 serializer.processingInstruction( parser.getText ());
97                 break;
98
99             case XmlPullParser.COMMENT:
100                 serializer.comment (parser.getText ());
101                 break;
102
103             case XmlPullParser.DOCDECL:
104                 serializer.docdecl (parser.getText ());
105                 break;
106         }
107     }
108
109     public void roundTrip () throws XmlPullParserException, IOException {
110         parser.nextToken(); // read first token
111
writeToken (parser.START_DOCUMENT); // write optional XMLDecl if present
112
while (parser.getEventType () != parser.END_DOCUMENT) {
113             writeToken ( parser.getEventType () );
114             parser.nextToken ();
115         }
116         writeToken (parser.END_DOCUMENT);
117     }
118
119     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
120         //for (int i = 0; i < args.length; i++)
121
for (int i = 0; i < 1; i++)
122         {
123             XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
124             XmlPullParser pp = factory.newPullParser();
125             XmlSerializer serializer = factory.newSerializer();
126
127             pp.setInput(new java.net.URL JavaDoc(args[ i ]).openStream(), null);
128             serializer.setOutput( System.out, null);
129
130             (new Roundtrip(pp, serializer)).roundTrip();
131         }
132     }
133
134 }
135
136
137
138
Popular Tags