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


猜你喜欢
- Java 回调函数详解前言:C语言中回调函数解释:回调函数(Callback Function)是怎样一种函数呢?函数是用来被调用的,我们调
- 前言可能对于很多新人来讲,看到这个题目,想到的能接收输入法输入的内容大概只有EditText和TextView这两个控件了,其实不然,只要是
- @WebFilter注解过滤器@WebFilter加在过滤器的注解上使用import lombok.extern.slf4j.Slf4j;i
- 我们的spring cloud微服务一般是打成jar包发布的,Linux下启动jar包和windows下一样,都是java -jar 包名,
- 本文实例分析了C# SQlite操作方法。分享给大家供大家参考,具体如下:最近项目需求用C#保存一些数据,如此先总结一下。需要下载Sqlit
- 介绍跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing)当页面发出跨域请求
- 前言上一篇文章用贝塞尔曲线画了一个看起来不错的小红点功能,技术上没什么难度,主要就是数学上的计算。这篇文章也差不多,模仿了一个常用的滑动解锁
- ListView显示大量相同格式数据常用属性:listSelector listView每项在选中、按下等不同状态时的Drawablediv
- android Launcher3 设置默认桌面应用,供大家参考,具体内容如下launcher3 的默认桌面应用是在 res/xml里 默认
- 生产者工程POM依赖可以在创建工程时直接选择添加依赖。application文件因为rabbitmq具有默认地址及用户信息,所以如果是本地r
- 1. 基本数据类型(以int为例,其他类似):Controller代码:@RequestMapping("saysth.do&qu
- 本期文章源码:GitHub一文彻底搞懂《并查集》!概念并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。
- 最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了。1、首先需
- 前言Kotlin 的泛型与 Java 一样,都是一种语法糖,只在源代码里出现,编译时会进行简单的字符串替换。泛型是静态类型语言中不可缺少的一
- 在maven的pom.xml里面添加一下依赖:<properties><project.build.sourceEncod
- /** * 三角数字: * 比达哥斯拉领导下的古希腊数学家发现了一个有趣的数字序列1, 3, 6, 10, 15, 21,... *
- Activity中Toast的使用Toast.makeText(this,"ADD",Toast.LENGTH_SHOR
- 方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。no
- C#实现的鼠标钩子,可以获取鼠标在屏幕中的坐标,记得要以管理员权限运行才行using System;using System.Collect
- 安装JDK/安装JRE以及配置java环境变量对于java初学者来说是一件比较头疼的事情,这边分享一个简单的批处理命令,助大家一步完成JDK