XML文件(1)--使用DOM示例
- 其他依赖字段/方法
// 书籍列表
private List<Book> bookList = new LinkedList<Book>();
/**
* 根据xml文件,得到书籍列表
*
* @param file
* @return
*/
public List<Book> getBookList(String file) {
parseXML(file);
return bookList;
}
- 获取DocumentBuilder(文件解析器)
/**
* 获取DocumentBuilder对象
*@return
*/
private DocumentBuilder getDocumentBuilder() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return builder;
}
- 解析XML文件
/**
* 读取XML,并将book对象存入书籍列表
*
* @param file
*/
private void parseXML(String file) {
// 1.临时书籍变量
Book book;
try {
// 2.获取DocumentBuilder对象
DocumentBuilder documentBuilder = getDocumentBuilder();
// 3.加载XML文件到当前项目下,获取Document‘文档’对象
Document document = documentBuilder.parse(file);
// 4.获取节点名称是book的集合
NodeList books = document.getElementsByTagName("book");
// 5.遍历book节点集合
for (int i = 0; i < books.getLength(); i++) {
// 重置book变量
book = new Book();
// 5.1声明book节点变量
Node bookNode = books.item(i);
// 5.2获取book节点的属性集合
NamedNodeMap nodeMap = bookNode.getAttributes();
// 5.3遍历属性集合,判断并为book对象的属性赋值
for (int j = 0; j < nodeMap.getLength(); j++) {
// 5.4声明book的属性
Node attrNode = nodeMap.item(j);
// 5.5如果属性Name为id
if (attrNode.getNodeName().equals("id")) {
book.setId(Integer.valueOf(attrNode.getNodeValue()));
}
}
// 5.6获取book节点的子节点
NodeList childList = bookNode.getChildNodes();
// 5.7遍历子节点
for (int j = 0; j < childList.getLength(); j++) {
// 5.8 声明book子节点
Node child = childList.item(j);
// 判断是否是节点。NodeType有三种:
// Element(节点):1,Attribute(属性):2,#Text(文本):3。
if (Node.ELEMENT_NODE == child.getNodeType()) {
// 5.9使用switch case判断,并为book对象属性赋值
switch (child.getNodeName()) {
case "title":
book.setTitle(child.getTextContent());
break;
case "author":
book.setAuthor(child.getTextContent());
break;
case "price":
book.setPrice(Double.valueOf(child.getTextContent()));
break;
case "year":
book.setYear(child.getTextContent());
break;
case "language":
book.setLanguage(child.getTextContent());
break;
default:
System.out.println("未知属性!");
}
}
}
// 6 将book对象放入集合
bookList.add(book);
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- 生成XML文件
/**
* 生成XML文件,写入book列表
*
* @param file
*/
private void createXML(List<Book> bookList, String file, String encoding) {
DocumentBuilder builder = getDocumentBuilder();
//创建document文件
Document document = builder.newDocument();
// 在document中,创建根节点
Element eBookstore = document.createElement("bookstore");
for (Book book : bookList) {
// 创建book节点
Element eBook = document.createElement("book");
// 为book节点添加id属性
eBook.setAttribute("id", String.valueOf(book.getId()));
// 创建book的子节点
Element eTitle = document.createElement("title");
// 创建CDATA元素
CDATASection titleByCDATA = document.createCDATASection(book.getTitle());
// 将CDATA元素加入title
eTitle.appendChild(titleByCDATA);
eTitle.setTextContent(book.getTitle());
Element eAuthor = document.createElement("author");
eAuthor.setTextContent(book.getAuthor());
Element eYear = document.createElement("year");
eYear.setTextContent(book.getYear());
Element ePrice = document.createElement("price");
ePrice.setTextContent(String.valueOf(book.getPrice()));
Element eLanguage = document.createElement("language");
eLanguage.setTextContent(book.getLanguage());
// 将子节点添加到book中
eBook.appendChild(eTitle);
eBook.appendChild(eAuthor);
eBook.appendChild(eYear);
eBook.appendChild(ePrice);
eBook.appendChild(eLanguage);
// 将book节点添加到bookstore根节点中
eBookstore.appendChild(eBook);
}
// 将bookstore节点添加到document中,目前文件只存在与内存中
document.appendChild(eBookstore);
// 创建TransformerFactory 对象
Transformer former = getTransformer(encoding);
try {
// 创建输出流
OutputStream output = new FileOutputStream(file);
// 输出XML文件到硬盘
former.transform(new DOMSource(document), new StreamResult(output));
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- 保存Tranformer对象,用于保存XML文件,设置自动换行和编码
/**
* 获取Tranformer对象
*
* @param encoding
* 指定编码
* @return Tranformer
*/
private Transformer getTransformer(String encoding) {
// 创建TransformerFactory 对象
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = null;
try {
former = factory.newTransformer();
// 换行
former.setOutputProperty(OutputKeys.INDENT, "yes");
// 指定编码
former.setOutputProperty(OutputKeys.ENCODING, encoding);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return former;
}
XML文件(1)--使用DOM示例的更多相关文章
- Java中的的XML文件读写与DOM
XML简介 要理解XML,HTML等格式,先来理解文档对象模型DOM 根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树.DOM 是这样规定的:整个文档是一个文档节点每个 HT ...
- XML文件解析之--DOM与SAX
xml文件又称‘可扩展性标记语言’,可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...
- Java是如何解析xml文件的(DOM)
Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...
- android解析xml文件方法之一-----DOM
Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...
- XML文件的解析—DOM、SAX
一.DOM 解析 思路:获得Document对象,遍历其中节点获得需要的内容 要点: Document : DocuemntBuilderFactory --newDocumentBuilder - ...
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- XML文件解析之DOM解析
XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...
- XML文件(2)--使用DOM4J示例
其他依赖字段/方法 private List<Book> bookList = new LinkedList<Book>(); public List<Book> ...
- Python中使用dom模块生成XML文件示例
在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...
随机推荐
- 几大排序算法的Java实现
很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...
- Dojo: Quick Start
1.Dojo学习地址 2.Dojo快速开始 2.1.Dojo引入 2.2.指定Dojo模块的位置 2.3.模块加载require 3.查找Dom节点 3.1.根据id查找dom节点 3.2.根据c ...
- 无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决
最近在写动画的时候做一个倒计时的效果,就是数字从大到小的一个动画,但是当我设置要new PropertyPath("XXXXXXX")的时候却报了标题的异常,各种报错.百度了好久也 ...
- jq focus 在火狐(Firefox)下无效
今天写代码的时候发现,在blur事件里面写focus获取焦点无效, $input.blur(function(){ ……………… $input.focus(): } 而且只是在火狐下面无效而已,很明显 ...
- kd树和knn算法的c语言实现
基于kd树的knn的实现原理可以参考文末的链接,都是一些好文章. 这里参考了别人的代码.用c语言写的包括kd树的构建与查找k近邻的程序. code: #include<stdio.h> # ...
- OpenWRT镜像爬虫搭建本地源
网上的爬虫不能用,还是先表达谢意,不过我比较懒不喜欢重复写别人写的教程,只贴出修改,怎么用自己看教程吧. 我自己改了一版可以正常爬: #!/usr/bin/env python #coding=utf ...
- TB6612FNG电机驱动模块的简单使用
TB6612FNG电机驱动模块的简单使用: 文 小波 QQ463431476 博客 http://www.cnblogs.com/xiaobo-Linux/
- [jquery]将当前时间转换成yyyymmdd格式
如题: function nowtime(){//将当前时间转换成yyyymmdd格式 var mydate = new Date(); var str = "" + mydate ...
- monkeyrunner之控件ID不存在或重复
我们在用monkeyrunner进行Android自动化时,通过获取坐标点或控件ID进行一系列操作.由于使用坐标点时,屏幕分辨率一旦更改,则代码中用到坐标的地方都要修改,这样导致代码的复用率较低.因此 ...
- nodejs核心模块之http
http模块包含以下5个核心类和方法及属性: 核心类 1,http.Agent 2,http.ClientRequest 3,http.Server 4,http.ServerResponse 5,h ...