
org.xmlpull.v1.samples.XmlCompare Maven / Gradle / Ivy
package org.xmlpull.v1.samples;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public class XmlCompare {
protected static final String FEATURE_XML_ROUNDTRIP =
"http://xmlpull.org/v1/doc/features.html#xml-roundtrip";
public static void main (String args[])
throws XmlPullParserException, IOException
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(
System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
factory.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
XmlPullParser pp = factory.newPullParser();
try {
pp.setFeature(FEATURE_XML_ROUNDTRIP, false);
} catch(XmlPullParserException ex) {
throw new RuntimeException("could nto disable roundtrip feature: "+ex);
}
System.out.println("parser implementation class is "+pp.getClass());
//pp.setInput(new StringReader(SAMPLE_XML));
final String FILE = "fcked_up2.xml";
pp.setInput(new FileReader(FILE));
//final String NS_URI = "http://whappdev1/bscwebservices/";
String text = getNextElementText(pp);
//System.out.println("getNextElementText="+text);
//Writer w = new FileWriter("c:/Forge/homepage/xmlpull/f3.xml");
//w.write(text);
//w.close();
// now just parse input
//pp.nextTag();
//System.out.println("current tag namespace="+pp.getNamespace()+" name="+pp.getName());
//pp.require(XmlPullParser.START_TAG, NS_URI, "string");
//System.out.println("text='"+pp.nextText()+"'");
// note nextText() moved parser to END_TAG
//System.out.println("current tag namespace="+pp.getNamespace()+" name="+pp.getName());
//pp.require(XmlPullParser.END_TAG, NS_URI, "string");
compareXmlTwoFiles(new FileReader(FILE),
new StringReader(text));
}
/**
* Returns the next Element in the stream (including all sub elements) as a String
* @param parser
* @return
* @throws org.xmlpull.v1.XmlPullParserException
* @throws java.io.IOException
*/
public static String getNextElementText(XmlPullParser parser) throws XmlPullParserException, IOException {
if(parser.getFeature(FEATURE_XML_ROUNDTRIP) == false) {
throw new RuntimeException("roundtrip feature must be enabled to get tag content");
}
int level = 1;
StringBuffer buf = new StringBuffer();
parser.nextTag();
buf.append(parser.getText());
//int [] holderForStartAndLength = new int[2];
while (level > 0) {
int event = parser.next();
String text = parser.getText();
if (event == XmlPullParser.START_TAG) {
buf.append(text);
if(parser.isEmptyElementTag()) {
parser.next(); //skip empty tag
} else {
level++;
}
} else if (event == XmlPullParser.END_TAG) {
// We need to handle tags... ;) returns both START_TAG= and END_TAG=
//if (!tmp.endsWith("/>")) buf.append(tmp);
buf.append(text);
level--;
//} else if (!parser.isWhitespace()) {
} else if (text.length() > 0) {
StringBuffer escapedText = new StringBuffer(text.length());
for (int i = 0; i < text.length(); i++)
{
char ch = text.charAt(i);
if(ch == '<') {
escapedText.append("<");
} else if(ch == '&') {
escapedText.append("&");
} else if(ch == '"') {
escapedText.append(""");
} else if(ch == '\'') {
escapedText.append("'");
} else {
escapedText.append(ch);
}
}
buf.append(escapedText);
}
}
return buf.toString();
}
static void compareXmlTwoFiles(Reader rr, Reader rq) throws XmlPullParserException, IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(
//System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
"org.xmlpull.mxp1.MXParserFactory", null);
factory.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
XmlPullParser r = factory.newPullParser();
r.setInput(rr);
XmlPullParser q = factory.newPullParser();
q.setInput(rq);
while(true) {
r.next();
q.next();
if(r.getEventType() != q.getEventType()) {
throw new RuntimeException("inconsistent events");
}
if(r.getEventType() == XmlPullParser.END_DOCUMENT) {
break;
}
if(r.getEventType() == XmlPullParser.START_TAG || r.getEventType() == XmlPullParser.END_TAG ) {
String rName = r.getName();
String qName = q.getName();
if(!rName.equals(qName)) {
throw new RuntimeException("element names mismatch");
}
if(r.getEventType() == XmlPullParser.START_TAG) {
}
} else if(r.getEventType() == XmlPullParser.TEXT) {
String rText = r.getText();
String qText = q.getText();
if(!rText.equals(qText)) {
throw new RuntimeException("text content mismatch '"+rText+"' and '"+qText+"'");
}
} else {
throw new RuntimeException("unknown event type "+r.getEventType()
+r.getPositionDescription());
}
System.err.print(".");
}
System.err.println("\nOK");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy