Android-XML

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<books>
<book id="1">
<name>C# 入门经典</name>
<price>10</price>
<des>Good</des>
</book>
<book id="2">
<name>C# 高级编程</name>
<price>20</price>
<des>Good</des>
</book>
<book id="3">
<name>Android 第一行代码</name>
<price>30</price>
<des>Good</des>
</book>
</books>

1.PULL解析器

(1)解析XML

    public static List<Ben_Book> decodeXMLByPULL(InputStream inputStream) {

        List<Ben_Book> list = null;
Ben_Book book = null; //1.创建XmlPUlParser实例
XmlPullParser parser = Xml.newPullParser();
try {
//2.设置数据流,指明编码方式
parser.setInput(inputStream, "utf-8");
//3.获取事件类型
int eventType = parser.getEventType();
//4.判断事件类型,只要不是文档结束,就继续解析
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { switch (eventType) {
case XmlPullParser.START_DOCUMENT: //文档开始位置
list = new ArrayList<>();
break;
case XmlPullParser.START_TAG: //标签开始
String name = parser.getName();
if (name.equals("book")) {
book = new Ben_Book();
String id= parser.getAttributeValue(0); //获取属性值
book.setId(id);
} else if (name.equals("name")) {
book.setName(parser.nextText().toString()); //获取节点内容
} else if (name.equals("price")) {
book.setPrice(parser.nextText().toString());
} else if (name.equals("des")) {
book.setDes(parser.nextText().toString());
}
break;
case XmlPullParser.END_TAG: //标签结束
list.add(book); //book 添加到集合当中
book = null;
break;
case XmlPullParser.END_DOCUMENT: //文档结束
break;
} eventType = parser.next(); //解析下一个事件
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

(2)生成XML文件

public String writeXML(List<Book> list) throws XmlPullParserException, IOException {

    XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
StringWriter sw = new StringWriter();
serializer.setOutput(sw);
serializer.startDocument("utf-8", true);
serializer.startTag("", "books"); //根节点 for (Book book : list) { serializer.startTag("", "book"); //*******//
serializer.attribute("", "id", book.getId()); serializer.startTag("", "name");
serializer.text(book.getName());
serializer.endTag("", "name"); serializer.startTag("", "price");
serializer.text(book.getPrice());
serializer.endTag("", "price"); serializer.startTag("", "des");
serializer.text(book.getDescription());
serializer.endTag("", "des"); serializer.endTag("","book"); //********//
}
serializer.endTag("", "books");
serializer.endDocument();
String xml = sw.toString();
System.out.println(xml);
return xml;
}

2.DOM解析器

(1)解析

   public static List<Ben_Book> decodeXMLByDOM(InputStream inputStream) {

        List<Ben_Book> list = new ArrayList<>();
Ben_Book book;
try {
//1.获得DOM解析器的工厂示例:
//DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
//2.从Dom工厂中获得dom解析器
//DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
//3.xml数据流读入Dom解析器
//Document doc = dbBuilder.parse(inputStream);
//或者可以一步到位
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
//4.得到文档中名称为book的元素的结点列表
NodeList nList = doc.getElementsByTagName("book");
//5.遍历该集合,显示集合中的元素以及子元素的名字
for (int i = 0; i < nList.getLength(); i++) {
//先从book元素开始解析
Element bookElement = (Element) nList.item(i);
book = new Ben_Book();
book.setId(bookElement.getAttribute("id")); //获取属性值 //获取book下的name,price,des
NodeList childNoList = bookElement.getChildNodes();
for (int j = 0; j < childNoList.getLength(); j++) {
Node childNode = childNoList.item(j);
//判断子note类型是否为元素Note
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) childNode;
if ("name".equals(childElement.getNodeName()))
book.setName(childElement.getFirstChild().getNodeValue());
else if ("price".equals(childElement.getNodeName()))
book.setPrice(childElement.getFirstChild().getNodeValue());
else if ("des".equals(childElement.getNodeName()))
book.setDes((childElement.getFirstChild().getNodeValue()));
}
}
list.add(book);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

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. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist

      帝国CMS刷新内容页出现以下错误 1 Table 'www.536831.com.phome_ecms_news_data_' doesn't exist select keyid,dokey,n ...

  2. create-react-app中添加less支持

    前言 使用 create-react-app 脚手架创建项目后,默认是不支持 less 的.所以我们需要手动添加. 第一步 暴露webpack配置文件 使用 create-react-app 创建的项 ...

  3. beego框架返回json数据

    一.routers路由 package routers import ( "mybeego/controllers" "github.com/astaxie/beego& ...

  4. 2018-2019-2 《Java程序设计》第4周学习总结

    20175319 2018-2019-2 <Java程序设计>第4周学习总结 教材学习内容总结 第四周学习了如下内容: 子类与父类 子类的继承性 子类与对象 重写方法 super关键字 f ...

  5. Web概述

    Web概述 1. JavaWeb 使用java开发的基于互联网的项目 2. 软件架构 C/S:客户端服务器架构 优点:用户体验好,很多数据在本地 缺点:安装.开发.部署.维护麻烦 B/S:浏览器服务器 ...

  6. 2.7 if应用:猜拳游戏

    应用:猜拳游戏 <1>运行效果: <2>参考代码: import random player = input('请输入:剪刀(0) 石头(1) 布(2):') player = ...

  7. LOJ #556. 「Antileaf's Round」咱们去烧菜吧

    好久没更博了 咕咕咕 现在多项式板子的常数巨大...周末好好卡波常吧.... LOJ #556 题意 给定$ m$种物品的出现次数$ B_i$以及大小$ A_i$ 求装满大小为$[1..n]$的背包的 ...

  8. Centos7 设置vim 显示文本不同颜色

    Centos7 设置vim 显示文本不同颜色 本人在查找设置 centos7 vim 文本显示颜色时, 学习了作者: luffy5459 (博客连接:https://blog.csdn.net/fei ...

  9. 网络知识 - 简易的自定义Web服务器

    简易的自定义Web服务器 基于浏览器向服务端发起请求 两台主机各自的进程之间相互通信,需要协议.IP地址和端口号,IP表示了主机的网络地址,而端口号则表示了主机上的某个进程的地址,IP加Port统称为 ...

  10. EHCache:Eelment刷新后,timeToLiveSeconds失效了?

    个人以为只要设定了timeToLiveSeconds,中间过程不管有没有访问,只要LiveSeconds时间到了,缓存就会失效.但是开发时发现并非如此,经过一番折腾,最终发现自己的理解是正确的,还是使 ...