xml解析-续-之Pull

/**
* 采用pull解析xml内容
* 建议平时使用pull 解析器解析xml 文档,容易理解

* @author Administrator
*
*/

 

/**
* 获取员工信息
* @param xmlInputStream
* @return
* @throws Exception
*/
public static List<Person> getPerson(InputStream xmlInputStream)throws Exception{
List<Person> persoList =null;
Person person =null;

 XmlPullParser parser= Xml.newPullParser();   

 

parser.setInput(xmlInputStream,"UTF-8"); //设置,解析

setInput(xml,encoding);
int event = parser.getEventType(); //将会解析xml 文件第一段字符
//pull解析器不能主动的自我解析,需要手动调用next()解析方法,进行解析
while (event!= XmlPullParser.END_DOCUMENT) { //如果不是文档末尾,就一直进行解析(不是结束文档事件)
switch (event) {
case XmlPullParser.START_DOCUMENT: //开始文档事件
persoList = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG: //开始元素事件处理
if ("person".equals(parser.getName())) {
//get attribute
int id= new Integer(parser.getAttributeValue(0));
person =new Person();
person.setId(id);
}
if (person!=null) {
if ("name".equals(parser.getName())) {
//get attribute
person.setName(parser.nextText()); //获取开始节点下面的文本节点的值
}
if ("age".equals(parser.getName())) {
//get attribute
int age= new Integer(parser.nextText());
person.setAge(age);
}
}

break;
case XmlPullParser.END_TAG: //结束元素事件
if ("person".equals(parser.getName())) {
persoList.add(person);
person = null;
}
break;

}
event =parser.next(); //调用next方法,进行下一步
}
return persoList;
}

 

 

/**
* 生成xml
* @param list
* @param outputStream
* @throws Exception
*/
public static void save(List<Person> list,OutputStream outputStream)throws Exception{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer serializer = factory.newSerializer();//获取序列化对象
serializer.setOutput(outputStream,"utf-8"); //设置输出方向
serializer.startDocument("utf-8",true); //设置xml 文件的编码,和xml文件是否可以独立存在
serializer.startTag(null,"persons"); //设置开始标签(命名空间设置为null,persons)
for(Person person: list){
serializer.startTag(null,"person"); //kaishi 设置,开始生成person 节点
serializer.attribute(null,"id",person.getId()+""); //设置节点属性
//设置子节点
serializer.startTag(null,"name");
serializer.text(person.getName());
serializer.endTag(null,"name");
//设置子节点
serializer.startTag(null,"age");
serializer.text(person.getAge()+"");
serializer.endTag(null,"age");

serializer.endTag(null,"person");
}

serializer.endTag(null,"persons");//设置结束标签又开始就有结束嘛
serializer.endDocument(); //结束文档
}

你可能感兴趣的:(xml解析)