使用Dom解析器,操作XML里面的信息
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*
* 使用Dom解析器,操作XML里面的信息
*
* @author Rick
*
* 2016-12-10下午2:32:15
*/
public class OopParseXMLDemo {
private Document document;
// 获得DOM树,获得Document对象
public void getDom() {
// 创建解析器工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 解析器工厂对象创建解析器对象
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
// 解析器对象指定XML文件创建Document对象
document = builder.parse("收藏信息.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 解析 收藏信息.xml,获得手机品牌和型号
public void showInfo() {
// 以Document对象为起点操作DOM数
NodeList brands = document.getElementsByTagName("Brand");
// 遍历NodeList,取出各节点
for (int i = 0; i < brands.getLength(); i++) {
// 每一个Brand节点
Node node = brands.item(i);
Element eleBrand = (Element) node;
String brandName = eleBrand.getAttribute("name");
System.out.println(brandName);
// 继续找node下面的节点,就是<type>
NodeList types = eleBrand.getChildNodes();
for (int j = 0; j < types.getLength(); j++) {
Node typeNode = types.item(j);
// 判断节点是否为元素
if (typeNode.getNodeType() == Node.ELEMENT_NODE) {
Element typeEle = (Element) typeNode;
System.out.println("\t" + typeEle.getAttribute("name"));
}
}
}
}
// 保存XML文件
public void saveXML(String path) {
// 获得转换器
TransformerFactory factory = TransformerFactory.newInstance();
// ---1.--->把转换器设置一下缩进值通过setAttribute
factory.setAttribute("indent-number", 4);
try {
Transformer transformer = factory.newTransformer();
// 指定特定的转换格式
transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
// ---2.---> 增加开启缩进转换格式
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// 源
DOMSource source = new DOMSource(document);
// 目标
/*
* StreamResult result = new StreamResult(new
* FileOutputStream(path));
*/
// ---3.--->最后以流的形式OutputStreamWriter输出
StreamResult result = new StreamResult(new OutputStreamWriter(
new FileOutputStream(path), "gb2312"));
// 开始转换
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
// 为xml文件添加元素
public void addEle() {
// (1)创建Brand元素
Element brand = document.createElement("Brand");
// (2)设置Brand元素的name="三星"
brand.setAttribute("name", "三星");
// (3)创建Type元素
Element type = document.createElement("Type");
// (4)设置Type元素name="Node2"
type.setAttribute("name", "Node2");
// (5)Type加到Brand里面去(添加一个孩子)
brand.appendChild(type);
// (6)再把Brand加到<PhoneInfo>里面来
document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
saveXML("收藏信息.xml");
}
// 修改元素:为每个<Brand>添加一个id属性,取值分别为0 1 2
public void updateEle() {
// 获取到每个Brand元素
NodeList brands = document.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Node brand = brands.item(i);
Element brandEle = (Element) brand;
// 修改每一个Brand元素的属性id
brandEle.setAttribute("id", i + "");
}
saveXML("收藏信息.xml");
}
// 删除元素:删除手机品牌为“华为”的相关元素
public void deleteEle() {
// 遍历所有的Brand元素,找到Brand的name=“华为”元素
NodeList brands = document.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Node brand = brands.item(i);
Element brandEle = (Element) brand;
// 找到Brand的name=“华为”元素,将其删除
if (brandEle.getAttribute("name").equals("华为")) {
brandEle.getParentNode().removeChild(brandEle);
}
}
saveXML("收藏信息.xml");
}
public static void main(String[] args) {
OopParseXMLDemo pd = new OopParseXMLDemo();
// pd.showInfo();
pd.getDom();
// pd.saveXML("新收藏信息.xml");
// pd.addEle();
// pd.updateEle();
pd.deleteEle();
}
}
使用Dom解析器,操作XML里面的信息的更多相关文章
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- 使用dom解析器对xml文档内容进行增删查改
直接添代码: XML文档名称(one.xml) <?xml version="1.0" encoding="UTF-8" standalone=" ...
- Java DOM解析器 - 修改XML文档
这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...
- Java DOM解析器 - 查询XML文档
这是需要我们查询的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0"?> ...
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- 通过pull解析器操作安卓的xml
通过pull解析器操作安卓的xml 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注: =================== ...
- Java DOM解析器 - 解析XML文档
使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...
- dom解析器机制 web基本概念 tomcat
0 作业[cn.itcast.xml.sax.Demo2] 1)在SAX解析器中,一定要知道每方法何时执行,及SAX解析器会传入的参数含义 1 理解dom解析器机制 1)dom解析和dom4j原理 ...
- JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...
随机推荐
- LPC1788的IIC使用
#ifndef __IIC0_H_ #define __IIC0_H_ #include "common.h" #include "delay.h" //IIC ...
- 如何获得keyhash
keyhash是由keystore产生的 三个命令解决问题 keytool -exportcert -alias androiddebugkey -keystore debug.keystore &g ...
- Android和BLE模块连接通信
首先,进行一下科普: 1.BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低 ...
- IOS即时通讯XMPP搭建openfire服务器 分类: ios技术 2015-03-07 11:30 53人阅读 评论(0) 收藏
一.下载并安装openfire 1.到http://www.igniterealtime.org/downloads/index.jsp下载最新openfire for mac版 比如:Openfir ...
- UIAlertController高级之嵌入其他控件 分类: ios技术 2015-02-02 11:58 96人阅读 评论(0) 收藏
在编码过程中,我们经常遇到需要这样一个效果,就是弹出框的嵌套; 举个最简单的例子,比如你要选择时间,必然需要一个时间选择器DatePicker.但是这个选择器又是在你点击某按钮时弹出,弹出方式最常见的 ...
- T4模板使用
本例使用的数据库是Northwind 1.新建tt文本模板customer.tt 2. 修改customer.tt内容为 <#@ template debug="false" ...
- mysql,mybatis使用中遇到的类型转化的问题
产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.3 ...
- Android实现版本更新
Android 实现从后台下载apk文件,保存到本地sd卡,使用系统安装apk,完成版本更新功能 LoadAppUtil.java import java.io.File; import java.i ...
- 获取打开文件的PID
var SI : TStartupInfo; PI : TProcessInformation; pid:DWORD; begin ZeroMemory(@SI, SizeOf(SI)); //Zer ...
- XML学习总结(二)——XML入门
XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...