xml的生成和解析
来源:互联网 发布:淘宝app能修改差评吗 编辑:程序博客网 时间:2024/06/05 22:41
概述:
在xml解析中存在三种解析sax解析,dom解析,pull解析。sax解析与pull解析比较类似,都是基于事件驱动,逐行读取解析,特点是解析速度快,占用内存小,解析完之后就被回收了。dom解析是一次性加载整个xml数据形成dom树,可以对整个xml的数据进行增删改查的操作,特点是比较耗内存,解析的速度比较慢。相比于文档对象模型DOM,pull是读取和操作 XML 数据的更快速、更轻量的方。由于android的内存有限,pull解析采用的就更广泛。在这里介绍下两种XML的解析方式,一种是一种是pull解析,dom4j解析。如下代码里面会有详细介绍这两种解析的详细情况。
一.pull解析
1、xml文件的生成
private void createXML() {try {// 创建解析工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获取解析器XmlSerializer xmlSerializer = factory.newSerializer();// 获取输出流ByteArrayOutputStream bos = new ByteArrayOutputStream();// 设置输出流xmlSerializer.setOutput(bos, "utf-8");// 开始文件xmlSerializer.startDocument("utf-8", true);// 设置开始标签、文本、结束标签,成对出现xmlSerializer.startTag(null, "request");xmlSerializer.startTag(null, "fwdm");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "fwdm");xmlSerializer.startTag(null, "khlist");xmlSerializer.startTag(null, "khxx");xmlSerializer.startTag(null, "khlxid");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "khlxid");xmlSerializer.startTag(null, "khmc");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "khmc");xmlSerializer.startTag(null, "nsrsbh");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "nsrsbh");xmlSerializer.startTag(null, "dz");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "dz");xmlSerializer.startTag(null, "dh");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "dh");xmlSerializer.startTag(null, "khh");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "khh");xmlSerializer.startTag(null, "zh");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "zh");xmlSerializer.startTag(null, "zjlx");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "zjlx");xmlSerializer.startTag(null, "zjhm");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "zjhm");xmlSerializer.startTag(null, "yx");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "yx");xmlSerializer.startTag(null, "lxr");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "lxr");xmlSerializer.startTag(null, "lxrsj");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "lxrsj");xmlSerializer.startTag(null, "xh");xmlSerializer.text("ddd");xmlSerializer.endTag(null, "xh");xmlSerializer.endTag(null, "khxx");xmlSerializer.endTag(null, "khlist");xmlSerializer.endTag(null, "request");// 文件的结束xmlSerializer.endDocument();String s = bos.toString();Toast.makeText(this, s, 1).show();} catch (Exception e) {e.printStackTrace();}}
生成的文件如下:
<?xml version="1.0" encoding="utf-8"?><request> <fwdm>ddd</fwdm> <khlist> <khxx> <khlxid>ddd</khlxid> <khmc>ddd</khmc> <nsrsbh>ddd</nsrsbh> <dz>ddd</dz> <dh>ddd</dh> <khh>ddd</khh> <zh>ddd</zh> <zjlx>ddd</zjlx> <zjhm>ddd</zjhm> <yx>ddd</yx> <lxr>ddd</lxr> <lxrsj>ddd</lxrsj> <xh>ddd</xh> </khxx> </khlist></request>
2、xml文件的解析
解析:
<?xml version="1.0" encoding="utf-8"?><result> <data>呵呵呵</data> <rtncode>0000</rtncode> <rtnmsg>返回信息</rtnmsg> </result>
public void analyXml(String xml) throws Exception {XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); ByteArrayInputStream inputStream = new ByteArrayInputStream(xml.getBytes()); parser.setInput(inputStream, "utf-8"); int type = parser.getEventType(); //判断是否是结束文件 while (type != XmlPullParser.END_DOCUMENT) { String name = parser.getName(); switch (type) { //开始标签 case XmlPullParser.START_TAG: if ("data".equals(name)) { String nextText = parser.nextText(); } else if ("rtncode".equals(name)) { String nextText = parser.nextText(); } else if ("rtnmsg".equals(name)) { String nextText = parser.nextText(); } break; //结束标签 case XmlPullParser.END_TAG: break; default: break; } //向下走一步 parser.next(); //再次获取事件类型 type = parser.getEventType(); }}
二.dom4j解析
1、xml文件生成
public void createXml() {//导入dom4j的jar包 //创建文件 Document document = DocumentHelper.createDocument(); //设置编码方式 document.setXMLEncoding("UTF-8"); //设置根节点 Element element = document.addElement("request"); //设置子节点并且设置文本 element.addElement("kpzdbs").addText("11111"); element.addElement("fplxdm").addText("11111"); element.addElement("sblx").addText("0"); Element element1 = element.addElement("skpkl"); element1.addElement("skpkl").addText("11111"); element1.addElement("keypwd").addText("11111"); element1.addElement("qmcs").addText("11111"); String xml = element.asXML();}生成的文件如下:
<?xml version="1.0" encoding="utf-8"?><request> <kpzdbs>11111</kpzdbs> <fplxdm>11111</fplxdm> <sblx>0</sblx> <skpkl> <skpkl>11111</skpkl> <keypwd>11111</keypwd> <qmcs>11111</qmcs> </skpkl></request>2、xml文件解析
解析如下的xml:
<?xml version="1.0" encoding="utf-8"?><request> <kpzdbs>11111</kpzdbs> <fplxdm>11111</fplxdm> <sblx>0</sblx> <skpkl> <list1> <skpkl>11111</skpkl> <keypwd>11111</keypwd> <qmcs>11111</qmcs> </list1> </skpkl> </request>
public void parseXml(String xml) throws DocumentException { try { Document document = DocumentHelper.parseText(xml); Element rootElement = document.getRootElement(); String kpzdbs = rootElement.elementTextTrim("kpzdbs"); String fplxdm = rootElement.elementTextTrim("fplxdm"); String sblx = rootElement.elementTextTrim("sblx"); Element skpkl1 = rootElement.element("skpkl"); // List elements = skpkl1.elements("list1"); //获取list1节点所有的集合 Iterator iterator = skpkl1.elementIterator("list1"); while (iterator.hasNext()) { Element element = (Element) iterator.next(); //List elements = element.elements(); //获取list1节点所有的集合 String skpkl = element.elementTextTrim("skpkl"); String keypwd = element.elementTextTrim("keypwd"); String qmcs = element.elementTextTrim("qmcs"); } } catch (DocumentException e) { e.printStackTrace(); } }
注意:以上两种方式在生成xml的时候,标签里文本不能为null,这个在写javabean时候要注意做非空判断,否则无法生成xml,会导致崩溃。
0 0
- XML的解析和生成
- xml的生成和解析
- xml的生成和解析
- XML的生成和解析
- XML 生成和解析
- XML生成和解析
- XML的解析和生成(dom4j)
- 生成和解析xml的利器
- XML文件的解析和生成(DOM)
- XML文件的生成和解析
- 生成和解析XML格式的字符串
- Xml 格式数据的生成和解析
- Xml格式数据的生成和解析
- xml文件的生成和解析
- 关于xml的解析和生成
- DOM生成和解析xml
- PBDOM 解析和生成XML
- JDOM生成和解析XML
- Use document modeling to enhance PMF_1: CTR Model.
- 100天土鸡饲养计划(86)
- 微信小程序之注册配置
- 深入理解Java虚拟机之走近Java
- Demo02数学运算__自增自减__取余运算
- xml的生成和解析
- Redis--The PHP Extension Installed
- ffmpeg framework
- Exception:DatePickerDialog和TimePickerDialog会执行两次的异常
- jdk类库源码分析-String类
- PID算法基本教程
- 数据库之视图
- leetcode oj java Bulls and Cows
- unity3d脚本编辑打不开vs2012