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 blocke.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为idif (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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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元素加入titleeTitle.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 blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TransformerException e) {// TODO Auto-generated catch blocke.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 blocke.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文件中,我们主 ...
随机推荐
- IDEA 中scala 程序运行时的错误:报错 test is already defined as object test
解决办法:在 创建main文件夹和scala文件夹的时候,注意src与这两个文件夹不能同时设置为resources,否则就会产生报错,解决办法将src文件夹的resources取消,右键.
- linux基础知识3_根文件系统详解
文件系统: rootfs:根文件系统 /boot:系统启动相关的文件,如内核.initrd以及grub /dev:设备文件 块设备:随机访问 字符设备:线性访问,按字符为单位 设备号:主设备号(maj ...
- 【FLUENT案例】04:利用DDPM+DEM模拟鼓泡流化床
1 引言2 问题描述3 准备4 FLUENT前处理 1 引言 DEM碰撞模型扩展了DPM模型的功能,能够用于稠密颗粒流动的模拟.该模型可以与DDPM(Dense DPM)模型何用以模拟颗粒对主相的阻碍 ...
- IIS 启用CORS ,IISExpress 通过IP 访问
在IIS 10中启用CORS: <system.webServer> <handlers> <remove name="OPTIONSVerbHandler ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- NYOJ----776删除元素
删除元素 时间限制:1000 ms | 内存限制:65535 KB 描述 题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值 输入 多组测 ...
- float4与half4数据类型
连续4个32位float类型数的向量 HLSL数据类型 GPU是以四维向量为基本单位来计算的.4个浮点数所组成的float4向量是GPU内置的最基本类型.使用GPU对两个float4向量进行计算,与C ...
- Quartz框架
Quartz框架 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多 ...
- [No00008B]远程桌面发送“Ctrl+Alt+Delete”组合键调用任务管理器
向远程桌面发送"Ctrl+Alt+Delete"组合键的两种方法 1.在本地按下Ctrl+Alt+End,可以成功发送"Ctrl+Alt+Delete"组合键! ...
- 20145222《信息安全系统设计基础》Linux常用命令汇总
学习Linux时常用命令汇总 通过Ctrl+f键可在该网页搜索到你想要的命令. Linux中命令格式为:command [options] [arguments] //中括号代表是可选的,即有些命令不 ...