Pull解析
Pull的XML解析操作与SAX解析操作类似,也是采用事件驱动的方式。当XML文档开始解析或者遇到节点时都会有相应的事件代码触发。
主要涉及两个类:
org.xmlpull.v1.XmlPullParserFactory
org.xmlpull.v1.XmlPullParser
使用XMLPull解析xml文件的步骤:
1.创建工厂类
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
2.创建parser
XmlPullParser xpp = factory.newPullParser();
3.设置输入流,即要解析的内容
xpp.setInput(input, "GBK"); //这里主要由两种形式,字符流(如:StringReader)或者字节流(如:FileInputStream)
4.通过循环,解析内容
int eventType = xpp.getEventType(); //必须要有
while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
all = new ArrayList<LinkMan>();
} else if(eventType == XmlPullParser.START_TAG) {
elementName = xpp.getName();
if("linkman".equals(elementName)) {
man = new LinkMan();
}
} else if(eventType == XmlPullParser.END_TAG) {
elementName = xpp.getName();
if("linkman".equals(elementName)) {
all.add(man);
man = null;
}
} else if(eventType == XmlPullParser.TEXT) {
if("name".equals(elementName)) {
man.setName(xpp.getText());
} else if("email".equals(elementName)) {
man.setEmail(xpp.getText());
}
}
eventType = xpp.next(); //一定要有
}
Pull生成XML文档
需要利用org.xmlpull.v1.XmlSerializer
使用XmlSerializer生成XML文件的步骤和解析xml文件的步骤类似:
1.创建工厂类
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
2.创建XmlSerializer
XmlSerializer xs = factory.newSerializer();
3.设置输出流,即要写入的目标位置流,可以是字节流,也可以是字符流。
xs.setOutput(output, "UTF-8");
4.处理输出内容
xs.startDocument("UTF-8", true);
xs.startTag(null, "addresslist");
Iterator<LinkMan> iter = this.all.iterator();
while(iter.hasNext()) {
LinkMan man = iter.next();
xs.startTag(null, "linkman");
xs.startTag(null, "name");
xs.text(man.getName());
xs.endTag(null, "name");
xs.startTag(null, "email");
xs.text(man.getEmail());
xs.endTag(null, "email");
xs.endTag(null, "linkman");
}
xs.endTag(null, "addresslist");
xs.endDocument();
xs.flush();