<?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)的更多相关文章

  1. php中通过DOM操作XML

    DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...

  2. php : DOM 操作 XML

    DOM 操作 XML 基本用法 XML文件: person.XML <?xml version="1.0" encoding="utf-8" ?> ...

  3. Java用DOM操作xml

    JAXP DOM方式解析XML文档实例增删改查package jiexi; import javax.xml.parsers.DocumentBuilder; import javax.xml.par ...

  4. java使用DOM操作XML

    XML DOM简介 XML DOM 是用于获取.更改.添加或删除 XML 元素的标准. XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 标签是一个 ...

  5. DOM操作XML文件

    一.IE中的XML(IE低版本才支持) 在统一的正式规范出来以前,浏览器对于 XML 的解决方案各不相同.DOM2 级提出了动态创建 XML DOM 规范,DOM3 进一步增强了 XML DOM. 所 ...

  6. PHP通过DOM操作XML

    PHP XML操作类DOMDocument属性及方法 注意大小写一定不能弄错. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataT ...

  7. java DOM 操作xml

    1 代码如下: package dom.pasing; import java.io.IOException; import java.io.StringWriter; import javax.xm ...

  8. ajax——dom对xml和html的操作

    上篇文章说到了dom的基础,dom能够操作xml和html,这次主要写利用dom的api去如何去操作xml和html文档. dom操作xml dom操作xml文档之前必须把xml文档装载到xml do ...

  9. DOM【介绍、HTML中的DOM、XML中的DOM】

    什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...

随机推荐

  1. linux下配置环境变量【原创】

    用户目录下的.profile, 你只需要在用户目录下,创建bin目录,在里面放入你想要执行的可执行文件,就可以在命令行下就可以使用了 # ~/.profile: executed by the com ...

  2. eclipse项目中启动项目无法载入类

    在eclipse 项目中,当载入jar包后,加载里面的包,可以找到此类,但是编译运行的时候报错java.lang.ClassNotFoundException: 1,路径名未写正确: 2,配置出错; ...

  3. 为什么Redis内存不宜过大

    redis这个内存数据库,它的高性能.稳定性都是不用怀疑的,但我们塞进redis的数据过多,内存过大,那如果出问题,那它可能会带给我们的就是灾难性. 作者:程超来源:网络|2016-05-23 09: ...

  4. C#中一个关于不同窗体间的颜色参数的传递

    1目标是 在弹出菜单中选择颜色,在主菜单中对控件进行操作(弹出菜单选择的颜色就是主菜单控件的颜色) 2颜色属性需要来回转换(也许不用转换,暂时还不会,有会的提醒下,TKS) 3用到一个颜色控件(col ...

  5. shell十三问:关于${0##*/} 和${0%/*}

    转自shell十三问:  http://bbs.chinaunix.net/thread-218853-1-1.html …… 假設我們定義了一個變量為:file=/dir1/dir2/dir3/my ...

  6. 动手动脑小程序——TryAndCatch

    import java.util.Scanner; public class Gade { public static void main(String[] args) {  // TODO 自动生成 ...

  7. php编译器

    WordPress http://pan.baidu.com/s/1eQnOnv0 epp3: http://pan.baidu.com/s/1pJKFOD1 配合xampp: http://pan. ...

  8. Linux高级变量

    http://blog.chinaunix.net/uid-27040051-id-3450991.html 高级变量 基本形式 [1].变量扩展 格式 ${变量名称} [2].命令扩展 格式 $(命 ...

  9. 自用java字符串工具类

    不断封装一些常用的字符串操作加到这个工具类里,不断积累: package com.netease.lede.qa.util; import java.text.ParseException; impo ...

  10. 编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/....dll”--“拒绝访问。

    错误如下: “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入 ...