Android-XML

XML文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <books>
  3. <book id="1">
  4. <name>C# 入门经典</name>
  5. <price>10</price>
  6. <des>Good</des>
  7. </book>
  8. <book id="2">
  9. <name>C# 高级编程</name>
  10. <price>20</price>
  11. <des>Good</des>
  12. </book>
  13. <book id="3">
  14. <name>Android 第一行代码</name>
  15. <price>30</price>
  16. <des>Good</des>
  17. </book>
  18. </books>

1.PULL解析器

(1)解析XML

  1. public static List<Ben_Book> decodeXMLByPULL(InputStream inputStream) {
  2. List<Ben_Book> list = null;
  3. Ben_Book book = null;
  4. //1.创建XmlPUlParser实例
  5. XmlPullParser parser = Xml.newPullParser();
  6. try {
  7. //2.设置数据流,指明编码方式
  8. parser.setInput(inputStream, "utf-8");
  9. //3.获取事件类型
  10. int eventType = parser.getEventType();
  11. //4.判断事件类型,只要不是文档结束,就继续解析
  12. while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
  13. switch (eventType) {
  14. case XmlPullParser.START_DOCUMENT: //文档开始位置
  15. list = new ArrayList<>();
  16. break;
  17. case XmlPullParser.START_TAG: //标签开始
  18. String name = parser.getName();
  19. if (name.equals("book")) {
  20. book = new Ben_Book();
  21. String id= parser.getAttributeValue(0); //获取属性值
  22. book.setId(id);
  23. } else if (name.equals("name")) {
  24. book.setName(parser.nextText().toString()); //获取节点内容
  25. } else if (name.equals("price")) {
  26. book.setPrice(parser.nextText().toString());
  27. } else if (name.equals("des")) {
  28. book.setDes(parser.nextText().toString());
  29. }
  30. break;
  31. case XmlPullParser.END_TAG: //标签结束
  32. list.add(book); //book 添加到集合当中
  33. book = null;
  34. break;
  35. case XmlPullParser.END_DOCUMENT: //文档结束
  36. break;
  37. }
  38. eventType = parser.next(); //解析下一个事件
  39. }
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. return list;
  44. }

(2)生成XML文件

  1. public String writeXML(List<Book> list) throws XmlPullParserException, IOException {
  2. XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
  3. StringWriter sw = new StringWriter();
  4. serializer.setOutput(sw);
  5. serializer.startDocument("utf-8", true);
  6. serializer.startTag("", "books"); //根节点
  7. for (Book book : list) {
  8. serializer.startTag("", "book"); //*******//
  9. serializer.attribute("", "id", book.getId());
  10. serializer.startTag("", "name");
  11. serializer.text(book.getName());
  12. serializer.endTag("", "name");
  13. serializer.startTag("", "price");
  14. serializer.text(book.getPrice());
  15. serializer.endTag("", "price");
  16. serializer.startTag("", "des");
  17. serializer.text(book.getDescription());
  18. serializer.endTag("", "des");
  19. serializer.endTag("","book"); //********//
  20. }
  21. serializer.endTag("", "books");
  22. serializer.endDocument();
  23. String xml = sw.toString();
  24. System.out.println(xml);
  25. return xml;
  26. }

2.DOM解析器

(1)解析

  1. public static List<Ben_Book> decodeXMLByDOM(InputStream inputStream) {
  2. List<Ben_Book> list = new ArrayList<>();
  3. Ben_Book book;
  4. try {
  5. //1.获得DOM解析器的工厂示例:
  6. //DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  7. //2.从Dom工厂中获得dom解析器
  8. //DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
  9. //3.xml数据流读入Dom解析器
  10. //Document doc = dbBuilder.parse(inputStream);
  11. //或者可以一步到位
  12. Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
  13. //4.得到文档中名称为book的元素的结点列表
  14. NodeList nList = doc.getElementsByTagName("book");
  15. //5.遍历该集合,显示集合中的元素以及子元素的名字
  16. for (int i = 0; i < nList.getLength(); i++) {
  17. //先从book元素开始解析
  18. Element bookElement = (Element) nList.item(i);
  19. book = new Ben_Book();
  20. book.setId(bookElement.getAttribute("id")); //获取属性值
  21. //获取book下的name,price,des
  22. NodeList childNoList = bookElement.getChildNodes();
  23. for (int j = 0; j < childNoList.getLength(); j++) {
  24. Node childNode = childNoList.item(j);
  25. //判断子note类型是否为元素Note
  26. if (childNode.getNodeType() == Node.ELEMENT_NODE) {
  27. Element childElement = (Element) childNode;
  28. if ("name".equals(childElement.getNodeName()))
  29. book.setName(childElement.getFirstChild().getNodeValue());
  30. else if ("price".equals(childElement.getNodeName()))
  31. book.setPrice(childElement.getFirstChild().getNodeValue());
  32. else if ("des".equals(childElement.getNodeName()))
  33. book.setDes((childElement.getFirstChild().getNodeValue()));
  34. }
  35. }
  36. list.add(book);
  37. }
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. return list;
  42. }

Android-XML的更多相关文章

  1. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  2. Android xml 格式 随笔

    打包的时候Android xml文件会由字符格式(utf-8编码)转换为二进制格式.具体如:http://blog.csdn.net/jiangwei0910410003/article/detail ...

  3. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  4. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  6. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  7. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  8. android xml布局文件属性说明

    android xml布局文件属性说明 [摘]android xml布局文件属性说明 LinearLayout和RelativeLayout 共有属性:java代码中通过btn1关联次控件androi ...

  9. Android] Android XML解析学习——方式比较

     [Android] Android XML解析学习——方式比较 (ZT)  分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...

  10. Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. GroupBox、TextBox、CheckBox、ToolStrip、RichTextBox、Timer控件

    GroupBox:划分窗体区域,内部可以拖放组件 TextBox:可编辑文本框,也可设置为只读 属性:ReadOnly(只读).PasswordChar(密码显示的符号,如*).Multiline(多 ...

  2. windows telnet 模拟 http请求

    1. 开启windows自带的telnet客户端(控制面板 --> 程序 --> 启用或关闭windows功能 --> ) 2. 打开cmd,使用Telnet客户端 3. 按ctrl ...

  3. 对于mysql数据库优化的见解

    一.数据库占用的空间大小.表占用空间大小.索引占用空间大小 在用阿里云的数据库的时候经常出现磁盘空间爆满的情况.所以要经常查询数据库相关内容占用的磁盘大小,有很多mysql客户端如navicat 就可 ...

  4. C++回顾day02---<继承相关问题>

    一:继承和组合混搭时,构造和析构调用原则 (一)先构造父类,再构造成员变量,最后构造自己 (二)先析构自己,再析构成员变量,最后父类析构(方向与构造相反) class A { public: int ...

  5. MySQL学习笔记(四)悲观锁与乐观锁

    恼骚 最近在搞并发的问题,订单的异步通知和主动查询会存在并发的问题,用到了Mysql数据库的 for update 锁 在TP5直接通过lock(true),用于数据库的锁机制 Db::name('p ...

  6. 新年 flag

    在浮躁的年代本不该如此贪多,奈何鸭梨山大...温故知新吧 GO中文社区 深入学习一两门新的编程语言: -Go编程基础 -Go Web基础 -Go名库讲解 rustlang 中文文档 知乎板块 GO 知 ...

  7. HttpReponse

    属性: django将请求报文中的请求行.头部信息.内容主体封装成 HttpRequest 类中的属性.   除了特殊说明的之外,其他均为只读的. 0.HttpRequest.scheme   表示请 ...

  8. JAVA进阶9

    间歇性混吃等死,持续性踌躇满志系列-------------第9天 1.使用throw语句抛出异常 在通常情况下,程序发生错误时系统会自动抛出异常,而有时希望程序自动抛出异常,可以使用throw语句来 ...

  9. 409 javascript if and while表达式

    数组定义.特点.运算符:算术运算 ++ --(自减 自加) 赋值运算发 =比较:!= == === 逻辑运算 有 && || ! 正则表达式 修饰符 i:用来表示 g:很少演示(在第一 ...

  10. 《Java编程思想第四版完整中文高清版.pdf》-笔记

    D.2.1 安插自己的测试代码 插入下述“显式”计时代码,对程序进行评测: long start = System.currentTimeMillis(); // 要计时的运算代码放在这儿 long ...