Android创建与解析XML(二)——详解Dom方式
作者:阳光岛主 发布时间:2023-08-20 02:30:05
标签:android,dom,xml
1. Dom概述
Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容
javax.xml.parsers
javax.xml.parsers.DocumentBuilder
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.ParserConfigurationException;
javax.xml.transform
javax.xml.transform.TransformerFactory
javax.xml.transform.Transformer
javax.xml.transform.dom.DOMSource
javax.xml.transform.stream.StreamResult
javax.xml.transform.OutputKeys;
javax.xml.transform.TransformerFactoryConfigurationError;
javax.xml.transform.TransformerConfigurationException;
javax.xml.transform.TransformerException;
org.w3c.dom
org.w3c.dom.Document;
org.w3c.dom.Element;
org.w3c.dom.Node;
org.w3c.dom.DOMException;
org.w3c.dom.NodeList;
org.xml.sax.SAXException;
创建和解析xml的效果图:
2、Dom 创建 XML
Dom,借助 javax.xml.parsers.DocumentBuilder,可以创建 org.w3c.dom.Document 对象。
使用来自 DocumentBuilderFactory 的 DocumentBuilder 对象在 Android 设备上创建与解析 XML 文档。您将使用 XML pull 解析器的扩展来解析 XML 文档。
/** Dom方式,创建 XML */
public String domCreateXML() {
String xmlWriter = null;
Person []persons = new Person[3]; // 创建节点Person对象
persons[0] = new Person(1, "sunboy_2050", "https://www.jb51.net/");
persons[1] = new Person(2, "baidu", "http://wwwbaiducom");
persons[2] = new Person(3, "google", "http://wwwgooglecom");
try {
DocumentBuilderFactory factory = DocumentBuilderFactorynewInstance();
DocumentBuilder builder = factorynewDocumentBuilder();
Document doc = buildernewDocument();
Element eleRoot = doccreateElement("root");
eleRootsetAttribute("author", "homer");
eleRootsetAttribute("date", "2012-04-26");
docappendChild(eleRoot);
int personsLen = personslength;
for(int i=0; i<personsLen; i++) {
Element elePerson = doccreateElement("person");
eleRootappendChild(elePerson);
Element eleId = doccreateElement("id");
Node nodeId = doccreateTextNode(persons[i]getId() + "");
eleIdappendChild(nodeId);
elePersonappendChild(eleId);
Element eleName = doccreateElement("name");
Node nodeName = doccreateTextNode(persons[i]getName());
eleNameappendChild(nodeName);
elePersonappendChild(eleName);
Element eleBlog = doccreateElement("blog");
Node nodeBlog = doccreateTextNode(persons[i]getBlog());
eleBlogappendChild(nodeBlog);
elePersonappendChild(eleBlog);
}
Properties properties = new Properties();
propertiessetProperty(OutputKeysINDENT, "yes");
propertiessetProperty(OutputKeysMEDIA_TYPE, "xml");
propertiessetProperty(OutputKeysVERSION, "0");
propertiessetProperty(OutputKeysENCODING, "utf-8");
propertiessetProperty(OutputKeysMETHOD, "xml");
propertiessetProperty(OutputKeysOMIT_XML_DECLARATION, "yes");
TransformerFactory transformerFactory = TransformerFactorynewInstance();
Transformer transformer = transformerFactorynewTransformer();
transformersetOutputProperties(properties);
DOMSource domSource = new DOMSource(docgetDocumentElement());
OutputStream output = new ByteArrayOutputStream();
StreamResult result = new StreamResult(output);
transformertransform(domSource, result);
xmlWriter = outputtoString();
} catch (ParserConfigurationException e) { // factorynewDocumentBuilder
eprintStackTrace();
} catch (DOMException e) { // doccreateElement
eprintStackTrace();
} catch (TransformerFactoryConfigurationError e) { // TransformerFactorynewInstance
eprintStackTrace();
} catch (TransformerConfigurationException e) { // transformerFactorynewTransformer
eprintStackTrace();
} catch (TransformerException e) { // transformertransform
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
}
savedXML(fileName, xmlWritertoString());
return xmlWritertoString();
}
运行结果:
3、Dom 解析 XML
Dom方式,解析XML是创建XML的逆过程,主要用到了builder.parse(is)进行解析,然后通过Tag、NodeList、Element、childNotes等得到Element和Node属性或值。
/** Dom方式,解析 XML */
public String domResolveXML() {
StringWriter xmlWriter = new StringWriter();
InputStream is= readXML(fileName);
try {
DocumentBuilderFactory factory = DocumentBuilderFactorynewInstance();
DocumentBuilder builder = factorynewDocumentBuilder();
Document doc = builderparse(is);
docgetDocumentElement()normalize();
NodeList nlRoot = docgetElementsByTagName("root");
Element eleRoot = (Element)nlRootitem(0);
String attrAuthor = eleRootgetAttribute("author");
String attrDate = eleRootgetAttribute("date");
xmlWriterappend("root")append("\t\t");
xmlWriterappend(attrAuthor)append("\t");
xmlWriterappend(attrDate)append("\n");
NodeList nlPerson = eleRootgetElementsByTagName("person");
int personsLen = nlPersongetLength();
Person []persons = new Person[personsLen];
for(int i=0; i<personsLen; i++) {
Element elePerson = (Element) nlPersonitem(i); // person节点
Person person = new Person(); // 创建Person对象
NodeList nlId = elePersongetElementsByTagName("id");
Element eleId = (Element)nlIditem(0);
String id = eleIdgetChildNodes()item(0)getNodeValue();
personsetId(IntegerparseInt(id));
NodeList nlName = elePersongetElementsByTagName("name");
Element eleName = (Element)nlNameitem(0);
String name = eleNamegetChildNodes()item(0)getNodeValue();
personsetName(name);
NodeList nlBlog = elePersongetElementsByTagName("blog");
Element eleBlog = (Element)nlBlogitem(0);
String blog = eleBloggetChildNodes()item(0)getNodeValue();
personsetBlog(blog);
xmlWriterappend(persontoString())append("\n");
persons[i] = person;
}
} catch (ParserConfigurationException e) { // factorynewDocumentBuilder
eprintStackTrace();
} catch (SAXException e) { // builderparse
eprintStackTrace();
} catch (IOException e) { // builderparse
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
}
return xmlWritertoString();
}
运行结果:
4、Person类
Person类,是创建xml的单位实例,基于Java面向对象定义的一个类
public class Person {
private int id;
private String name;
private String blog;
public Person() {
thisid = -1;
thisname = "";
thisblog = "";
}
public Person(int id, String name, String blog) {
thisid = id;
thisname = name;
thisblog = blog;
}
public Person(Person person) {
thisid = personid;
thisname = personname;
thisblog = personblog;
}
public Person getPerson(){
return this;
}
public void setId(int id) {
thisid = id;
}
public int getId(){
return thisid;
}
public void setName(String name) {
thisname = name;
}
public String getName() {
return thisname;
}
public void setBlog(String blog) {
thisblog = blog;
}
public String getBlog() {
return thisblog;
}
public String toString() {
return "Person \nid = " + id + "\nname = " + name + "\nblog = " + blog + "\n";
}
}
来源:http://blog.csdn.net/sunboy_2050/article/details/7516058
0
投稿
猜你喜欢
- 1.静态成员、实例成员1.1定义及说明数据成员:静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个
- Android开发中会有很多很新奇的交互,比如天猫商城的首页头部的分类,使用的是GridLayoutManager+横向指示器实现的,效果如
- 废话不多说,直接上代码import java.text.SimpleDateFormat; import java.util.Date;/*
- 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax 时,在后台将数据封装为 JSON 字符串更是常见。之前在做项目的时候
- 利用redis进行springSession的存储:存储:// 在session中保存用户信息 H
- QDownloadQDownload是基于Android平台实现的下载框架。API简洁易上手,只需5分钟即可实现一个多任务、多线程、断点下载
- 本文实例为大家分享了java实现简单发红包的具体代码,供大家参考,具体内容如下这个案例是普通红包,均分的,不是拼手气红包。package n
- 方法的覆盖在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列
- 1.引言在开发中,拖放是一种比较常见的手势操作,使用它能够让应用的交互更加地便捷和友好,本文将简要介绍如何为Android中的View添加拖
- SpringBoot小白创建项目,扫描不到Controller一系列问题1.2.3.4.5.6.还有一种办法是在启动服务类的入门,添加@Co
- 本文实例讲述了java实现的日期时间转换工具类。分享给大家供大家参考,具体如下:最基础的东西,总结一下,下次用的时候就方便一些了。废话不多说
- 一、JDK中常见的异常情况1、常见异常总结图2、java中异常分类Throwable类有两个直接子类:(1)Exception:出现的问题是
- 一、栈(Stack)1、什么是栈?栈其实就是一种数据结构 - 先进后出(先入栈的数据后出来,最先入栈的数据会被压入栈底)什么是java虚拟机
- 前言本文重点是要将mongodb与spring整合到项目中去,在实践中发现问题,追踪问题,然后解决问题。下面话不多说了,来一起看看详细的介绍
- 有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码List<Integer> list
- 目录前言Java Heap进程内存分配内存不足管理GC 垃圾回收内核交换守护进程低内存终止守护进程最后前言很高兴遇见你~内存优化一直是 An
- 一、默认静态资源路径类路径下:staticpublicresources这几个目录为默认静态资源访问的目录二、增加静态资源路径前缀动态资源和
- JNI中的java接口使用项目需求,需要在c++函数中监听相应的状态,并在java端进行一些列的处理。这个需要在JNI中写一个subscri
- 一、CallContext 概述命名空间:System.Runtime.Remoting.MessagingCallContext 用于提供
- Java是一种强类型, 许多流行的编程语言都已经支持局部变量类型推断,如js,Python,C++等JDK10 可以使用var作为局部变量类