1、Pull概述
AndroID系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser
XmlSerializer没有像XmlPullParser那样提取XML事件,而是把它们推出到数据流OutputStream或Writer中。
XmlSerializer提供了很直观的API,即使用startdocument开始文档,enddocument结束文档,startTag开始元素,endTag结束元素,text添加文本等。
Pull方式创建XML,应用了标准xml构造器 org.xmlpull.v1.XmlSerializer来创建 XML ,org.xmlpull.v1.XmlPullParser来解析XML,需要导入以下内容
org.xmlpull.v1
org.xmlpull.v1.XmlPullParser; org.xmlpull.v1.XmlPullParserException; org.xmlpull.v1.XmlPullParserFactory; org.xmlpull.v1.XmlSerializer;Pull 创建和解析 XML 的效果图:
2、Pull 创建 XML
pull方式,创建XML是通过 XmlSerializer 类实现
首先,通过XmlSerializer得到创建XML的实例 xmlSerializer
接着,通过 xmlSerializer 设置输出 xmlSerializer.setoutput,xmlSerializer.startdocument("utf-8",null)设置xml属性等
然后,通过 xmlSerializer 创建 startdocument、startTag、text、endTag、enddocument等
/** Pull方式,创建 XML */ public String pullXMLCreate(){ StringWriter xmlWriter = new StringWriter(); Person []persons = new Person[3]; // 创建节点Person对象 persons[0] = new Person(1,"sunboy_2050","http://blogcsdnnet/sunboy_2050"); persons[1] = new Person(2,"baIDu","http://wwwbaIDucom"); persons[2] = new Person(3,"Google","http://wwwGooglecom"); try { // // 方式一:使用AndroID提供的实用工具类androIDutilXml // XmlSerializer xmlSerializer = XmlnewSerializer(); // 方式二:使用工厂类XmlPullParserFactory的方式 XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); XmlSerializer xmlSerializer = factorynewSerializer(); xmlSerializersetoutput(xmlWriter); // 保存创建的xml xmlSerializersetFeature("http://xmlpullorg/v1/doc/featuresHTML#indent-output",true); // xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertIEsHTML#serializer-indentation"," "); // 设置属性 // xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertIEsHTML#serializer-line-separator","\n"); xmlSerializerstartdocument("utf-8",null); // <?xml version='0' enCoding='UTF-8' standalone='yes' ?> xmlSerializerstartTag("","root"); xmlSerializerattribute("","author","homer"); xmlSerializerattribute("","date","2012-04-28"); int personsLen = personslength; for(int i=0; i<personsLen; i++) { xmlSerializerstartTag("","person"); // 创建person节点 xmlSerializerstartTag("","ID"); xmlSerializertext(persons[i]getID()+""); xmlSerializerendTag("","ID"); xmlSerializerstartTag("","name"); xmlSerializertext(persons[i]getname()); xmlSerializerendTag("","name"); xmlSerializerstartTag("","blog"); xmlSerializertext(persons[i]getBlog()); xmlSerializerendTag("","blog"); xmlSerializerendTag("","person"); } xmlSerializerendTag("","root"); xmlSerializerenddocument(); } catch (XmlPullParserException e) { // XmlPullParserFactorynewInstance eprintstacktrace(); } catch (IllegalArgumentException e) { // xmlSerializersetoutput eprintstacktrace(); } catch (IllegalStateException e) { // xmlSerializersetoutput eprintstacktrace(); } catch (IOException e) { // xmlSerializersetoutput eprintstacktrace(); } catch (Exception e) { eprintstacktrace(); } savedXML(filename,xmlWritertoString()); return xmlWritertoString(); }
运行结果:
3、Pull 解析 XML
pull方式,解析xml是通过 XmlPullParser 类实现
首先,通过XmlPullParser得到解析xml的实例 xpp
接着,通过 xpp设置输入 xpp.setinput(is,"utf-8"),声明定义保存xml信息的数据结构(如:Person数组)
然后,通过 xpp 解析 START_document、START_TAG、TEXT、END_TAG、END_document等
/** Pull方式,解析 XML */ public String pullXMLResolve(){ StringWriter xmlWriter = new StringWriter(); inputStream is = readxml(filename); try { // // 方式一:使用AndroID提供的实用工具类androIDutilXml // XmlPullParser xpp = XmlnewPullParser(); // 方式二:使用工厂类XmlPullParserFactory的方式 XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); XmlPullParser xpp = factorynewPullParser(); xppsetinput(is,"utf-8"); List<Person> personsList = null; // 保存xml的person节点 Person person = null; StringBuffer xmlheader = null; // 保存xml头部 String ele = null; // Element flag int eventType = xppgetEventType(); while(XmlPullParserEND_document != eventType) { switch (eventType) { case XmlPullParserSTART_document: personsList = new ArrayList<Person>(); // 初始化persons xmlheader = new StringBuffer(); // 初始化xmlheader break; case XmlPullParserSTART_TAG: if("root"equals(xppgetname())) { String attrAuthor = xppgetAttributeValue(0); String attrDate = xppgetAttributeValue(1); xmlheaderappend("root")append("\t\t"); xmlheaderappend(attrAuthor)append("\t"); xmlheaderappend(attrDate)append("\n"); } else if("person"equals(xppgetname())) { person = new Person(); // 创建person实例 } else if("ID"equals(xppgetname())) { ele = "ID"; } else if("name"equals(xppgetname())) { ele = "name"; } else if("blog"equals(xppgetname())) { ele = "blog"; } else { ele = null; } break; case XmlPullParserTEXT: if(null != ele) { if("ID"equals(ele)) { personsetID(IntegerparseInt(xppgetText())); } else if("name"equals(ele)) { personsetname(xppgetText()); } else if("blog"equals(ele)) { personsetBlog(xppgetText()); } } break; case XmlPullParserEND_TAG: if("person"equals(xppgetname())){ personsListadd(person); person = null; } ele = null; break; } eventType = xppnext(); // 下一个事件类型 } xmlWriterappend(xmlheader); int personsLen = personsListsize(); for(int i=0; i<personsLen; i++) { xmlWriterappend(personsListget(i)toString()); } } catch (XmlPullParserException e) { // XmlPullParserFactorynewInstance eprintstacktrace(); } catch (Exception e) { eprintstacktrace(); } return xmlWritertoString(); }
运行结果:
4、Person类
请参见前面博客 Android 创建与解析XML(二)―― Dom方式 【4、Person类】
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android 创建与解析XML(四)――详解Pull方式全部内容,希望文章能够帮你解决Android 创建与解析XML(四)――详解Pull方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)