使用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文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...
随机推荐
- FZU 1397 保送
网络流入门题. 源点到每一个学生连一条边,容量为1 每个学校到汇点连一条边,容量为L 符合要求的学生和学校之间连边,容量为1. 从源点到汇点的最大流就是答案. #include<cstdio&g ...
- 浅谈IOS8之size class
文章目录 1. 简介 2. 实验 3. 实战 3.1. 修改 Constraints 3.2. 安装和卸载 Constraints 3.3. 安装和卸载 View 3.4. 其他 4. 后话 以前和安 ...
- 【转】C/CPP之static
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...
- PHP获取当前类名、函数名、方法名
PHP获取当前类名.方法名 __CLASS__ 获取当前类名 __FUNCTION__ 当前函数名(confirm) __METHOD__ 当前方法名 (bankcard::confirm) _ ...
- python unicode 转中文 遇到的问题 爬去网页中遇到编码的问题
How do convert unicode escape sequences to unicode characters in a python string 爬去网页中遇到编码的问题 Python ...
- bzoj1449————2016——3——14
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1449 题目简述: Description Input Output 一个整数表示联盟里所有球 ...
- centos 软件库安装
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the mo ...
- Codeforces 320A Magic Numbers
因为晚上有一个cf的比赛,而自己从来没有在cf上做过题,就找了道题熟悉一下. 题目大意:给一个数,判断是否能由1,14,144三个数连接得到. 代码如下: #include <stdio.h&g ...
- eclipse安装Veloeclipse(Velocity编辑插件)
eclipse安装Veloeclipse(Velocity编辑插件) Help-->install new software-->Add 增加 Name:Veloeclipse Value ...
- Struts2框架学习(一)
Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...