DOM 操作XML(CRUD)
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书>
<书名 name="dddd">C语言程序设计</书名>
<作者>张孝祥</作者>
<售价>40</售价>
</书>
<书>
<书名>C++教程</书名>
<作者>自己</作者>
<售价>50</售价>
</书>
</书架>
package com.gbx.it; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StreamCorruptedException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
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.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; public class XMLDemo {
public String path = "src/book.xml";
/*
* 获得指定的Document
*/
public Document getDocument() throws ParserConfigurationException, SAXException, IOException {
//1: 获得dom解析工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//2:获得dom解析
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//获得Document
Document document = documentBuilder.parse(path); return document;
}
/*
* 将XML文件由内存写入硬盘
*/
public void refreshXML(Source xmlSource, Result outputTarget) throws TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(xmlSource, outputTarget);
}
// ----------R------------------
/*
* 遍历DOM树
*/
@Test
public void read1() throws ParserConfigurationException, SAXException, IOException {
Document document = getDocument();
NodeList nodeList = document.getElementsByTagName("书架");
for (int i = 0; i < nodeList.getLength(); ++i) {
listNodes(nodeList.item(i));
}
}
private void listNodes(Node item) {
if (item instanceof Element) {
System.out.println(item.getNodeName());
}
NodeList nodeList = item.getChildNodes();
for (int i = 0; i < nodeList.getLength(); ++i) {
listNodes(nodeList.item(i));
}
}
/*
* 读取标签内的内容 <书名 name="dddd">java web就业</书名>
*/
@Test
public void read2() throws ParserConfigurationException, SAXException, IOException {
Document document = getDocument();
Element book = (Element) document.getElementsByTagName("书名").item(0);
String value = book.getTextContent();
System.out.println("书名: " + value);
}
/*
* 读取标签的属性
*/
@Test
public void read3() throws ParserConfigurationException, SAXException, IOException {
Document document = getDocument();
Element book = (Element) document.getElementsByTagName("书名").item(0);
if (book.hasAttributes()) {
NamedNodeMap nodeMap = book.getAttributes();
for (int i = 0; i < nodeMap.getLength(); ++i) {
String attrName = nodeMap.item(i).getNodeName();
String attrValue = nodeMap.item(i).getNodeValue();
System.out.println("name : " + attrName + " value :" + attrValue);
}
} String value = book.getAttribute("name");
System.out.println(value);
}
// ----------------C------------------- /*
* 添加标签 C
*/
//在指定标签的最后边添加标签
@Test
public void add1() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument();
Element book = (Element) document.getElementsByTagName("书").item(0);
Element newChild = document.createElement("你行");
newChild.setTextContent("嘿嘿");
book.appendChild(newChild); refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
//在指定标签的指定位置添加标签
@Test
public void add2() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument();
Element book = (Element) document.getElementsByTagName("书").item(0); Element newChild = document.createElement("你行");
newChild.setTextContent("嘿嘿"); Element refChild = (Element) document.getElementsByTagName("售价").item(0); book.insertBefore(newChild, refChild); refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
//添加属性
@Test
public void add3() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument(); Element e = (Element) document.getElementsByTagName("售价").item(0);
e.setAttribute("value", "RMB");
refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
//----------------D----------------
//删除标签
@Test
public void delElement() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument();
Element element = (Element) document.getElementsByTagName("你行").item(0);
element.getParentNode().removeChild(element);
refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
//删除标签的属性 @Test
public void delAttr() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument();
Element element = (Element) document.getElementsByTagName("售价").item(0);
element.removeAttribute("value");
refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
//-------------U------------
@Test
public void update() throws ParserConfigurationException, SAXException, IOException, TransformerException {
Document document = getDocument();
Element element = (Element) document.getElementsByTagName("书名").item(0);
element.setTextContent("C语言程序设计");
refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
}
}
参考:方立勋老师视频
DOM 操作XML(CRUD)的更多相关文章
- php中通过DOM操作XML
DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...
- php : DOM 操作 XML
DOM 操作 XML 基本用法 XML文件: person.XML <?xml version="1.0" encoding="utf-8" ?> ...
- Java用DOM操作xml
JAXP DOM方式解析XML文档实例增删改查package jiexi; import javax.xml.parsers.DocumentBuilder; import javax.xml.par ...
- java使用DOM操作XML
XML DOM简介 XML DOM 是用于获取.更改.添加或删除 XML 元素的标准. XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 标签是一个 ...
- DOM操作XML文件
一.IE中的XML(IE低版本才支持) 在统一的正式规范出来以前,浏览器对于 XML 的解决方案各不相同.DOM2 级提出了动态创建 XML DOM 规范,DOM3 进一步增强了 XML DOM. 所 ...
- PHP通过DOM操作XML
PHP XML操作类DOMDocument属性及方法 注意大小写一定不能弄错. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataT ...
- java DOM 操作xml
1 代码如下: package dom.pasing; import java.io.IOException; import java.io.StringWriter; import javax.xm ...
- ajax——dom对xml和html的操作
上篇文章说到了dom的基础,dom能够操作xml和html,这次主要写利用dom的api去如何去操作xml和html文档. dom操作xml dom操作xml文档之前必须把xml文档装载到xml do ...
- DOM【介绍、HTML中的DOM、XML中的DOM】
什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...
随机推荐
- Ubuntu 14.04 安装 JDK 7.0
1.新建jvm文件夹-解压 # mkdir /usr/lib/jvm # tar zxvf jdk-7u79-linux-x64.gz -C /usr/lib/jvm 2.设置环境变量,在/etc/p ...
- Python包管理工具介绍
常见的包管理工具及关系 setuptools -->distribute easy_install-->pip 1.distribute distribute是对标准库disutils模块 ...
- discuz搬家后报错SQL:SELECT value FROM [Table]vars WHERE name=’noteexists1′的解决办法
基本上每个站长都会经历网站搬家,网站搬家中有时候就会遇到这次提到的这个错误数据库报错::SQL:SELECT value FROM [Table]vars WHERE name=\\\'noteexi ...
- 再谈自主开发与企业IT管理
前两天写<自主开发与带兵打仗>分析了一下自主开发的利与弊,得到了园内不少朋友的反馈,但我觉得还有很多东西没有交待清楚,可能有很多朋友也跟我一样在公司的IT部门,有自己的研发团队也有很多外购 ...
- YTU 2974: C语言习题5.26--文件操作3
2974: C语言习题5.26--文件操作3 时间限制: 1 Sec 内存限制: 128 MB 提交: 213 解决: 92 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...
- java中文件的读取和写入
//首先要顶一个file文件用来存放要读取的文件 File f=new File("c:/test/aa.txt"); //在实例化一个输入流,并把文件对象传到里面 FileInp ...
- hdu1016 Prime Ring Problem
dfs,用全局数组和变量保存并更新当前状态. 答案可以直接在搜索结束时打印,n为奇数时方案数为0. acm.hdu.edu.cn/showproblem.php?pid=1016 #include & ...
- Unity-Animator深入系列---剪辑播放后位置预判(Animator.Target)
回到 Animator深入系列总目录 animator.SetTarget(...);可以在播放前预判剪辑播放后的位置,但只限于人形动画 参数1是预判的关节,参数2是映射的剪辑时间 调用后通过targ ...
- laravel 重写以及500错误
http://www.golaravel.com/laravel/docs/5.1/ sudo chmod 755 -R laravel chmod -R o+w laravel/storage
- MySQL常用操作总结
MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...