android解析,组包XML文件
来源:互联网 发布:数据分析处理是什么 编辑:程序博客网 时间:2024/06/05 22:33
第一个例子:
1.
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><PersonInfoCache><person><pension>785.6</pension><basemonth>201201</basemonth><fund>198.4</fund><medical>196.4</medical></person><person><pension>785.6</pension><basemonth>201202</basemonth><fund>198.4</fund><medical>196.4</medical></person><person><pension>785.6</pension><basemonth>201203</basemonth><fund>198.4</fund><medical>196.4</medical></person><person><pension>785.6</pension><basemonth>201204</basemonth><fund>198.4</fund><medical>196.4</medical></person></PersonInfoCache>解析代码如下:public static List<Map<String, Object>> getPersons(InputStream xml) throws Exception{List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();Map<String,Object> map=new HashMap<String,Object>();XmlPullParser pullParser=Xml.newPullParser();pullParser.setInput(xml, "UTF-8");int event=pullParser.getEventType();while(event!=XmlPullParser.END_DOCUMENT){switch (event) {case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:if("pension".equalsIgnoreCase(pullParser.getName())){map.put("pension", pullParser.nextText());}else if("basemonth".equalsIgnoreCase(pullParser.getName())){map.put("basemonth", pullParser.nextText());//SharedPreferences preferences=getSharedPreferences("itcase",);//Editor editor=preferences.edit();//System.out.println( pullParser.nextText());}else if("fund".equalsIgnoreCase(pullParser.getName())){map.put("fund", pullParser.nextText());}else if("medical".equalsIgnoreCase(pullParser.getName())){map.put("medical", pullParser.nextText());}break;case XmlPullParser.END_TAG:if("person".equals(pullParser.getName())){list.add(map); map=new HashMap<String,Object>(); //很重要}break;}event=pullParser.next();}return list;}
2.
2.1使用XmlPullParser解析xml数据:
①pullParser.setInput(xml, "UTF-8");给pull解析器一个输入流数据。
②int eventType = pullParser.getEventType();获取当前事件类型。
③while (eventType != XmlPullParser.END_DOCUMENT) 比对当前事件类型是否为xml文档中的"END_DOCUMENT",若“是”则结束解析。
eventType = pullParser.next();顺移当前解析器的指针。
④case XmlPullParser.START_TAG:当解析遇到元素的开始标识时,判断具体是哪个元素,获取所需的数据。
⑤case XmlPullParser.END_TAG:当解析遇到元素的结束标识时,判断是否为一个完整数据的结束标识,若“是”则打包一条数据。
2.2、XmlSerializer序列化生成xml数据:
- public static List<Person> getPersons(InputStream xml) throws Exception {
- List<Person> persons = null;
- Person person = null;
- XmlPullParser pullParser = Xml.newPullParser();
- pullParser.setInput(xml, "UTF-8");
- int eventType = pullParser.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- persons = new ArrayList<Person>();
- break;
- case XmlPullParser.START_TAG:
- if ("person".equals(pullParser.getName())) {
- int id = Integer.parseInt(pullParser.getAttributeValue(0));
- person = new Person();
- person.setId(id);
- }
- if ("name".equals(pullParser.getName())) {
- String name = pullParser.nextText();
- person.setName(name);
- }
- if ("age".equals(pullParser.getName())) {
- int age = Integer.parseInt(pullParser.nextText());
- person.setAge(age);
- }
- break;
- case XmlPullParser.END_TAG:
- if ("person".equals(pullParser.getName())) {
- persons.add(person);
- person = null;
- }
- break;
- }
- eventType = pullParser.next();
- }
- return persons;
- }
①serializer.setOutput(outStream, "UTF-8");给序列化器一个输出流。
②根据所需xml数据格式开始序列化生成xml数据。
PS:网上资料提到相关bug有待验证。
- public static void createXml(List<Person> persons, OutputStream outStream) throws Exception {
- XmlSerializer serializer = Xml.newSerializer();
- serializer.setOutput(outStream, "UTF-8");
- serializer.startDocument("UTF-8", true);
- serializer.startTag(null, "persons");
- for(Person person : persons){
- serializer.startTag(null, "person");
- serializer.attribute(null, "id", person.getId().toString());
- serializer.startTag(null, "name");
- serializer.text(person.getName());
- serializer.endTag(null, "name");
- serializer.startTag(null, "age");
- serializer.text(person.getAge().toString());
- serializer.endTag(null, "age");
- serializer.endTag(null, "person");
- }
- serializer.endTag(null, "persons");
- serializer.endDocument();
- outStream.flush();
- outStream.close();
- }
bug: 实现Xml.newPullParser()
调用nextText()有个错误,nextText()
并不总是向文档中所提到优先于END_TAG执行
。
第3个例子:
3.Android怎么把数据转成xml格式通过Socket发送
比如:String a=100;String b=100;想转成:<zuobiao><a>100</a><b>100</b></zuobiao>发送到服务端public static String CreateXMLDoc() throws Exception{ ByteArrayOutputStream baos=new ByteArrayOutputStream(); XmlSerializer xml=Xml.newSerializer(); xml.setOutput(baos, "UTF-8"); xml.startDocument("UTF-8", null); xml.startTag(null, "zuobiao"); xml.startTag(null, "a"); xml.text("100"); xml.endTag(null, "a"); xml.startTag(null, "b"); xml.text("100"); xml.endTag(null, "b"); xml.endTag(null, "zuobiao"); xml.endDocument(); byte[] xmlData=baos.toByteArray(); String xmlString=new String(xmlData,"UTF-8"); baos.flush(); baos.close(); baos=null; return xmlString; } 最后,将这个函数返还的字符串转换成字节数组,用socket发送出去就行了。具体发送你自己发送就行了(或者你也可以直接返回xmlData字节数组,然后发送出去也行,具体看你定义的收发规则)。
0 0
- android解析,组包XML文件
- PHP解析Android APK包的XML文件
- 用expat解析包解析XML文件
- Android解析XML文件
- android xml文件解析
- Android 解析XML文件
- android解析XML文件
- Android解析XML文件
- Android解析XML文件
- android xml文件解析
- Android解析XML文件
- android XML文件解析
- Android解析XML文件
- android解析xml文件
- Android解析xml文件
- android解析xml文件
- Android解析XML文件
- Android 解析xml文件
- mysql管理日常命令
- linux串口编程实现---有图有真相
- android 使用Theme + attr换肤
- URAL - 1243 - Divorce of the Seven Dwarfs (大数取模)
- python-minidom模块【解析xml】
- android解析,组包XML文件
- Molar mass
- ActionBar隐藏修改图标和标题
- java 中字符拼接学习心得
- C#高级编程四十七天----集合接口和类型
- #leetcode#Valid Palindrome
- 如何实现左滑返回(2)
- MySQL修改root密码的多种方法
- UITableView滑动删除表格行(UITableViewCell)