`
一夕剑
  • 浏览: 53436 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用DOM来解析、修改、删除XML

    博客分类:
  • Java
阅读更多

package com.mgear.domparse;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

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;

public class magicalXML {
public static void main(String[] args) throws ParserConfigurationException {
magicalXML u = new magicalXML();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
try {
// 读取源文件,如果不存在就创建一个新的给它
File f = new File("d:\\magical123.xml");
Document d = db.parse(f);
TransformerFactory tfFac = TransformerFactory.newInstance();
Transformer tf = tfFac.newTransformer();
tf.setOutputProperty(OutputKeys.ENCODING,"gb2312");
tf.setOutputProperty(OutputKeys.INDENT,"yes");
StreamResult result = new StreamResult(System.out);
DOMSource source = new DOMSource(d);
System.out.println("修改前的XML:");
tf.transform(source, result);
System.out.println();

// 打印元素名称和文本值
u.read(d);

// 为书名为"java basic"的作者增加属性sex
u.add(d, "java basic", "sex", "man");

// 修改书名为"java basic"的作者为"magicalboy"
u.update(d, "java basic", "magicalboy");

// 删除书名为"java basic"的作者元素
u.delete(d, "java basic");
System.out.println("修改后的XML:");
tf.setOutputProperty("encoding", "GB2312");
tf.transform(source, result);
// 保存修改后的xml文件
tf.transform(source, new StreamResult(
new File("d:\\magical123.xml")));

} catch (SAXException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
// 创建xml
Document dl = db.newDocument();
u.create(dl);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

// 创建方法
public void create(Document d) {
Element pub = d.createElement("publication");
Element book = d.createElement("book");
Element title = d.createElement("Title");
Element author = d.createElement("Author");

title.appendChild(d.createTextNode("java basic"));
author.appendChild(d.createTextNode("john"));
book.appendChild(title);
book.appendChild(author);
pub.appendChild(book);

book = d.createElement("book");
title = d.createElement("Title");
author = d.createElement("Author");
title.appendChild(d.createTextNode("magicalbook"));
author.appendChild(d.createTextNode("枫叶"));

book.appendChild(title);
book.appendChild(author);
pub.appendChild(book);
// 增加到根节点
d.appendChild(pub);
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer f = tf.newTransformer();
f.setOutputProperty("encoding", "GB2312");
System.out.println("正在创建新的xml...");
f.transform(new DOMSource(d), new StreamResult(new File(
"d:\\magical123.xml")));
System.out.println("创建新的xml成功!新的xml如下:");
f.transform(new DOMSource(d), new StreamResult(System.out));
} catch (Exception e) {
e.printStackTrace();
}
}

// 读取元素名称和文本值方法
public void read(Document d) {
NodeList nl = d.getElementsByTagName("*"); // 取所有结点
for (int i = 0; i < nl.getLength(); i++) {

if (nl.item(i).getFirstChild().getNodeType() == Node.ELEMENT_NODE)
System.out.println("元素名称:" + nl.item(i).getNodeName());
else {
System.out.println("元素名称:" + nl.item(i).getNodeName());
System.out.println("文本值:" + nl.item(i).getTextContent());
}
}
}

// 元素增加属性方法
public void add(Document d, String title, String attr, String value) {
NodeList nl = d.getElementsByTagName("Title");
Node n;
Element author;
for (int i = 0; i < nl.getLength(); i++) {
n = nl.item(i);
author = (Element) n.getNextSibling().getNextSibling();
if (title.equals(n.getFirstChild().getNodeValue())) {
System.out.println("为元素" + author.getNodeName() + "增加" + attr
+ "属性:" + value);
author.setAttribute(attr, value);
}
}
}

// 修改方法
public void update(Document doc, String title, String author) {
NodeList nl = doc.getElementsByTagName("Title");
String strNode;
Element e;
// Node n;
// System.out.println("有" + nl.getLength() + "个book节点");
try {
for (int i = 0; i < nl.getLength(); i++) {
e = (Element) nl.item(i);
// n = nl.item(i);
strNode = e.getFirstChild().getNodeValue();
// System.out.println(strNode);
// strNode = n.getFirstChild().getNodeValue();
// System.out.println(strNode);
if (title.equals(strNode)) {
Element Eauthor = (Element) e.getNextSibling()
.getNextSibling();
System.out.println("修改前的Author:"
+ Eauthor.getFirstChild().getNodeValue());
Eauthor.getFirstChild().setNodeValue(author);
System.out.println("修改后的Author:"
+ Eauthor.getFirstChild().getNodeValue());
}
}
} catch (Exception ee) {
ee.printStackTrace();
}
}

// 删除方法
public void delete(Document doc, String title) {
NodeList nl = doc.getElementsByTagName("Title");
Element e = doc.getDocumentElement();
Node n;
String strNode;
// System.out.println("\n有"+nl.getLength()+"个Title节点");
try {
for (int i = 0; i < nl.getLength(); i++) {
n = nl.item(i).getFirstChild();
strNode = n.getNodeValue();
// System.out.println(e.getNodeName());
// System.out.println(e.getFirstChild().getNextSibling().getNodeName());
// System.out.println(nl.item(i).getNodeName());
// System.out.println(strNode);
if (("java basic").equals(strNode)) {
System.out.println("\n准备要删除的书名为"
+ title
+ "的作者是:"
+ nl.item(i).getNextSibling().getNextSibling()
.getFirstChild().getNodeValue());
e.getFirstChild().getNextSibling().removeChild(
nl.item(i).getNextSibling().getNextSibling());
System.out.println("删除成功!");
}
}
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
转载自:http://6377936.blog.163.com/blog/static/3922283420094213950566/

分享到:
评论

相关推荐

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    换句话说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 模块简介: 1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的...

    dom解析基本操作删除 修改……

    解析,修改,以及删除并写到硬盘上删除与修改xml文件 把操作后的内容,写到硬盘上

    dom4j解析XML

    用dom4j解析XML的基础问题,包括建立XML文档,添加、修改、删除节点,以及格式化(美化)输出和中文问题。可作为dom4j的入门资料。

    XML+DOM+解析和生成+教程

    XML+DOM+解析和生成+教程 - 本资源是一个XML的教程,教你如何用Java的DOM技术解析和生成XML文档,包括创建和遍历节点,修改和删除属性,添加和删除元素等。

    v1.2 解析XML文件 读取XML文件 保存XML文件 添加节点 删除节点 修改节点 添加属性 修改/删除属性

    功能:创建XML文件的根节点 参数:[in] sName 根节点的节点名 返回:true创建成功 false创建失败 **************************************/ bool CreateRootNode(CString sName); /************************...

    DOM4J 解析XML 添加 删除 修改

    NULL 博文链接:https://lancijk.iteye.com/blog/972592

    zTree树型菜单+Dom4j解析XML+struts2+spring整合_完整树型菜单权限管理案例(附源代码+API学习文档)

    前台页面展示用zTree插件,后台数据用XML保存,利用Dom4j进行解析,涉及到了对XML的增、删、改等等特别需求的技术,并用struts2+spring进行整合项目,源代码中有非常完整的注释,导入myEclipse部署运行,即可从...

    基于DOM的XML解析器

    本系统实现了一个基于DOM的XML生成器和解析器。以树形结构显示了XML文档各节点的关系。点击节点时,可以显示节点的各种信息,还可以对节点进行增加、删除、修改。总之,可以很方便的操作XML文档。

    MFC、DOM实现的XML文件解析、修改和生成

    功能说明:对附件的xml文件进行解析,获取到指定字段。并且可以更新字段、添加和删除字段。 详细介绍请看http://sonicning.blogbus.com/logs/36726735.html

    dom4j 解析 XML (dom4j-1.6.1.jar,jaxen-1.1-beta-5.jar,xerces.jar)

    工程包括 DOM4J 处理 xml 全过程(读取,增加,修改,删除) 内包括 xml, java解析类,要用到的包,附详细注释 希望給大家学习解析xml提供点点补助! [在IBM developerWorks上面可以找到一篇文章,对主流的Java XML...

    Qt5 XML文件的解析,增删改查节点。

    主要是Qt5 对XML文件的解析。 有解析,重点是增加,删除,查询,修改功能。 还是很简单的,希望对大家有帮助。

    基于DOM的XML解析技术在构件描述中的应用

    XML 是允许使用者自定义标记描述数据元素,突破了HTML 固定标记集合约束的语言, DOM 是处理XML 文档的... 可使用DOM 规范解析XML 文档的数据元素, 将提取出的内容导入到构件库中, 作为构件描述信息, 从而实现构件

    zTree树型菜单+Dom4j解释XML+struts2+spring整合_完整案例(附源代码+API学习文档)

    前台页面展示用zTree插件,后台数据用XML保存,利用Dom4j进行解析,涉及到了对XML的增、删、改等等特别需求的技术,并用struts2+spring进行整合项目,源代码中有非常完整的注释,导入myeclipse部署运行,即可从...

    详解android使用SAX解析XML文件

    解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析。 DOM(文件对象模型)解析:解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以根据DOM接口来操作这个树结构了。 优点:整个文档读入内存,...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    将XML文件中所有内容以DOM树形式存放在内存中,支持删除、修改等功能。缺点是消耗内存较大。 三种解析方式 DOM解析 逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删...

    xml入门教程/xml入门教程

    8) XML是SGML的子语言,由SGML简化而来,起初的目的是为Web的结构文档提供服务。 9) W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。 10)XML是分层的树形结构的自解释的一种可扩展的标记...

    dom4j使用教程+dom4j.jar

    收集于网络的dom4j解析使用,包括创建,修改,删除等并且有jar文件一同上传

    dom4j

    } &lt;br&gt; /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @...

    基于java swing和dom4j的购物管理系统

    该系统采用MVC架构,使用Java Swing编写用户界面,使用DOM4J解析和操作XML文件存储数据。 系统主要包含以下模块: 登录注册模块:用户可以在该模块中进行注册和登录操作,登录成功后才能使用系统的其他功能。 ...

Global site tag (gtag.js) - Google Analytics