1.book.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书>
<书名 name="sss">Java就业培训教程</书名>
<作者>张孝祥</作者>

<售价>109元</售价>
<售价>59.00元</售价>
<售价>1.00元</售价>
</书>
</书架>

2.

package cn.itcast.xml;

import java.io.FileOutputStream;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
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.Node;
import org.w3c.dom.NodeList;

//使用dom方式对xml文档进行crud
public class Demo2 {
@Test
public void read1() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

// 2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();

// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/cn/itcast/xml/book.xml");

NodeList list = document.getElementsByTagName("书名");
Node node = list.item(0);
String content = node.getTextContent();
System.out.println(content);
}

// 得到xml文档中的所有标签
@Test
public void read2() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/cn/itcast/xml/book.xml");
// 得到根节点
Node root = document.getElementsByTagName("书架").item(0);
list(root);
}

private void list(Node node) {
if (node instanceof Element) {
System.out.println(node.getNodeName());
}
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
list(child);
}
}

// 得到xml文档中标签属性
@Test
public void read3() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/cn/itcast/xml/book.xml");
// 得到根节点
Element bookname = (Element) document.getElementsByTagName("书名")
.item(0);
String value = bookname.getAttribute("name");
System.out.println(value);
}

// 向xml文档中添加节点:<售价>1.00</售价>
@Test
public void add() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/cn/itcast/xml/book.xml");

// 创建节点
Element price = document.createElement("售价");
price.setTextContent("1.00元");

// 把创建的节点挂到第一本书上
Element book = (Element) document.getElementsByTagName("书").item(0);
book.appendChild(price);

// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/cn/itcast/xml/book.xml")));

}

// 向xml文档中指定位置上添加节点:<售价>20.00</售价>
@Test
public void add1() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/cn/itcast/xml/book.xml");

// 创建节点
Element price = document.createElement("售价");
price.setTextContent("20.00元");

// 得到参考节点
Element refNode = (Element) document.getElementsByTagName("售价").item(1);

// 得到要挂载的节点
Element book = (Element) document.getElementsByTagName("书").item(0);
// 往book节点的指定位置插入
book.insertBefore(price, refNode);

// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/cn/itcast/xml/book.xml")));

}

// 向xml文档节点上添加属性:<书名>Java就业培训教程</书名>上添加name="sss"
@Test
public void addAttr() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/cn/itcast/xml/book.xml");

Element bookname = (Element) document.getElementsByTagName("书名")
.item(0);
bookname.setAttribute("name", "sss");

// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/cn/itcast/xml/book.xml")));
}

//删除节点
@Test
public void delete() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/cn/itcast/xml/book.xml");

// 得到要删除的节点
Element e = (Element) document.getElementsByTagName("售价").item(0);
//方法一:e.getParentNode().removeChild(e);

//方法二:
// 得到要删除节点的父节点
Element book = (Element) document.getElementsByTagName("书").item(0);
// 父节点删除子节点
book.removeChild(e);

// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/cn/itcast/xml/book.xml")));

}

//更新价格
@Test
public void update() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/cn/itcast/xml/book.xml");

Element e = (Element) document.getElementsByTagName("售价").item(0);
e.setTextContent("109元");

// 把更新后内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/cn/itcast/xml/book.xml")));

}
}

XML案例(使用JAXP进行DOM解析)的更多相关文章

  1. xml解析-jaxp之dom解析

    package day06_parser.dom; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的 ...

  2. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  3. JAXP进行DOM和SAX解析

    1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ...

  4. 使用DOM解析XML文档

    简单介绍一下使用DOM解析XML文档,解析XML文件案例: <?xml version="1.0" encoding="UTF-8"?> -< ...

  5. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  6. xml--通过DOM解析XML

    此文章通过3个例子表示DOM方式解析XML的用法. 通过DOM解析XML必须要写的3行代码. step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器) step 2:获得具体的dom解 ...

  7. DOM解析和SAX解析的区别

    DOM解析和SAX解析的区别 博客分类: XML DOM SAX  DOM解析和SAX解析的区别 No 区 别 DOM解析 SAX解析 1 操作 将所有文件读取到内存中形成DOM树,如果文件量过大,则 ...

  8. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  9. 使用jaxp对比xml进行DOM解析

    /*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...

随机推荐

  1. Vue动态创建组件方法

    组件写好之后有的时候需要动态创建组件.例如: 编辑文章页面,正文是一个富文本编辑器,富文本编辑器是一个第三方的组件,点击添加章节的时候需要动态的创建一个富文本编辑器这个时候怎么处理呢. 富文本编辑器也 ...

  2. windons共享的一些问题

    有时候访问共享一直说无法打开共享,但是别人确实是开了共享. 其中可能如下: 1.首先确定网络没有问题,win+R输入cmd,ping对方IP地址,保证是网络是通的,如果不通,关闭共享电脑的防火墙. 2 ...

  3. web前端学习总结--HTML

    web三要素: 浏览器:向服务器发起请求,下载服务器中的网页(HTML),然后执行HTML显示出内容 服务器:接受浏览器的请求,发送相应的页面到浏览器 HTTP协议:浏览器与服务器的通讯协议. HTM ...

  4. PAT 1091. Acute Stroke (bfs)

    One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...

  5. 清北学堂模拟赛d7t1 消失的数字

    题目描述 现在,我的手上有 n 个数字,分别是 a1; a2; a3; :::; an.我现在需要删除其中的 k 个数字.当然我不希望随随便便删除,我希望删除 k个数字之后,剩下的 n - k 个数中 ...

  6. 了解一下JAVA中的NIO模块

    网上资料大把,但要写写代码,我这个年纪的人才有一点点记忆了.. 参考URL: http://blog.csdn.net/wuxianglong/article/details/6612282 pack ...

  7. Servlet的HttpServletResponse输出

    了解其中的一些字符设置,PrintWriter输出等.. form.html: <!DOCTYPE html> <html> <head> <title> ...

  8. [bzoj1251]序列终结者_splay

    序列终结者 bzoj-1251 题目大意:给定一个长度为n的正整数序列,支持区间加,区间反转,查询区间最大值.所有元素开始都是0. 注释:$1\le n\le 5\cdot 10^4$,操作个数不多于 ...

  9. [bzoj3697]采药人的路径_点分治

    采药人的路径 bzoj-3697 题目大意:给你一个n个节点的树,每条边分为阴性和阳性,求满足条件的链的个数,使得这条链上阴性的边的条数等于阳性的边的条数,且这条链上存在一个节点,这个节点到一个端点的 ...

  10. Linxu用户管理(转)

    说明:用户管理的操作涉及root权限,所以以下实例中应该使用sudo或者root用户进行操作. 背景: Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管 ...