xml解析之pull解析
- pull解析xml文件的步骤:
1.拿到XmlPullParserFactory工厂对象
2.通过工厂对象拿到解析器(newPullParser())
3.指定要被解析的xml文件的路径及解码格式
4.获得事件的类型(getEventType())
5.循环解析(当没有到文档结尾就一直的解析)
示例代码如下:
@Test
public void xmlPull() throws Exception {
// 1,拿到XmlPullParserFactory工厂对象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 2,通过工厂对象拿到解析器(newPullParser())
XmlPullParser parser = factory.newPullParser();
// 3指定要被解析的xml文件的路径及解码格式
InputStream is = new FileInputStream("src/student.xml");
parser.setInput(is, "UTF-8");
// 4,获得事件的类型(getEventType())
int type = parser.getEventType();
List<Student> list = new ArrayList<Student>();
Student stu = null;
// 当不是文档的结束标签就一直循环的遍历
while (type != XmlPullParser.END_DOCUMENT) {
if (type == XmlPullParser.START_TAG) {
if ("name".equals(parser.getName())) {
stu = new Student();
String name = parser.nextText();
stu.setName(name);
} else if ("age".equals(parser.getName())) {
String age = parser.nextText();
stu.setAge(age);
} else if ("city".equals(parser.getName())) {
String city = parser.nextText();
stu.setCity(city);
}
}else if(type==XmlPullParser.END_TAG){
if("student".equals(parser.getName())){
list.add(stu);
}
}
// 手动的得到下一个标签,并且一定要赋值给type,不然会死循环
type = parser.next();
}
for (Student student : list) {
System.out.println(student.toString());
}
}
被解析的xml文件
- 文件如下
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<students>
<student>
<name>mcc</name>
<age>18</age>
<city>上海</city>
</student>
<student>
<name>lw</name>
<age>19</age>
<city>深圳</city>
</student>
</students>
通过Serializer序列化器生成xml文件
- 生成步骤如下:
/**
* 生成xml文件
* 生成步骤:
* 1,通过XmlPullParserFactory获得工厂对象
* 2,通过上面得到的工厂对象拿到序列化对象Serializer的对象
* 3,通过setOutput()把创建的xml文件写入到指定的目的地
* 4,通过序列化对象,生成指定的标签
*
* @throws Exception
*/
@Test
public void serializerTest() throws Exception {
// 创建serializer工厂对象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 通过工厂对象得到Serializer对象
XmlSerializer serializer = factory.newSerializer();
// 3,指定一个输出流setOutput();
OutputStream os = new FileOutputStream("src/student.xml");
//
serializer.setOutput(os, "UTF-8");
// 生成xml文件头
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "students");
serializer.startTag(null, "student");
serializer.startTag(null, "name");
serializer.text("mcc");
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text("18");
serializer.endTag(null, "age");
serializer.startTag(null, "city");
serializer.text("上海");
serializer.endTag(null, "city");
serializer.endTag(null, "student");
serializer.startTag(null, "student");
serializer.startTag(null, "name");
serializer.text("lw");
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text("19");
serializer.endTag(null, "age");
serializer.startTag(null, "city");
serializer.text("深圳");
serializer.endTag(null, "city");
serializer.endTag(null, "student");
serializer.endTag(null, "students");
serializer.endDocument();
}
这样xml的pull解析和通过Serializer序列化器生成xml文件的两个小demo就完成了