import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
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.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class HandleXML {
/**
* 采用DOM方式
* @author Stone
*
*/
public class DOMForXml {
/**
* 获得doc对象
* @param fileName
* @return
*/
public Document getDocument(String fileName) {
Document document = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(fileName));
} catch (Exception e) {
e.printStackTrace();
}
return document;
}
/**
* 将改动持久到文件
* @param doc
* @param distFileName
*/
public void modifyFile(Document doc, String distFileName) {
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer tfer = tf.newTransformer();
DOMSource dsource = new DOMSource(doc);
StreamResult sr = new StreamResult(new File("student.xml"));
tfer.transform(dsource, sr);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解析
* @param fileName
*/
public void paseXml(String fileName) {
Document document = getDocument(fileName);
NodeList nodeList = document.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
StringBuilder sb = new StringBuilder();
sb.append("姓名:"
+ document.getElementsByTagName("name").item(i)
.getFirstChild().getNodeValue());
sb.append(" , ");
sb.append("年龄:"
+ document.getElementsByTagName("age").item(i)
.getFirstChild().getNodeValue());
sb.append(" , ");
sb.append("性别:"
+ document.getElementsByTagName("sex").item(i)
.getFirstChild().getNodeValue());
sb.append(" , ");
sb.append("地址:"
+ document.getElementsByTagName("address").item(i)
.getFirstChild().getNodeValue());
System.out.println(sb.toString());
}
}
/**
* 创建一个新的学生
* @param name
* @param age
* @param sex
* @param address
*/
public void addNewNode(String name, String age, String sex,
String address) {
try {
Document document = getDocument("student.xml");
NodeList nodeList = document.getElementsByTagName("students");
//创建新的节点
Node studentNode = document.createElement("student");
Node nameNode = document.createElement("name");
nameNode.appendChild(document.createTextNode(name));
Node ageNode = document.createElement("age");
ageNode.appendChild(document.createTextNode(age));
Node sexNode = document.createElement("sex");
sexNode.appendChild(document.createTextNode(sex));
Node addressNode = document.createElement("address");
addressNode.appendChild(document.createTextNode(address));
// 添加节点
studentNode.appendChild(nameNode);
studentNode.appendChild(ageNode);
studentNode.appendChild(sexNode);
studentNode.appendChild(addressNode);
nodeList.item(0).appendChild(studentNode);
// 此时真正的处理将新数据添加到文件中(磁盘)
TransformerFactory tf = TransformerFactory.newInstance();
Transformer tfer = tf.newTransformer();
DOMSource dsource = new DOMSource(document);
StreamResult sr = new StreamResult(new File("student.xml"));
tfer.transform(dsource, sr);
} catch (Exception e) {
e.printStackTrace();
}
paseXml("student.xml");
}
/**
* 删除一个节点
* @param name
*/
public void deleteNode(String name) {
Document document = getDocument("student.xml");
NodeList nodeList = document.getElementsByTagName("name");
for (int i = 0; i < nodeList.getLength(); i++) {
String value = nodeList.item(i).getFirstChild()
.getTextContent();
if (name != null && name.equalsIgnoreCase(value)) {
Node parentNode = nodeList.item(i).getParentNode();
document.getFirstChild().removeChild(parentNode);
}
}
modifyFile(document, "student.xml");
}
/**
* 根据name修改某个节点的内容
* @param name
*/
public void updateNode(String name) {
Document document = getDocument("student.xml");
NodeList nodeList = document.getElementsByTagName("name");
for (int i = 0; i < nodeList.getLength(); i++) {
String value = nodeList.item(i).getFirstChild()
.getTextContent();
if (name != null && name.equalsIgnoreCase(value)) {
Node parentNode = nodeList.item(i).getParentNode();
NodeList nl = parentNode.getChildNodes();
for (int j = 0; j < nl.getLength(); j++) {
String modifyNode = nl.item(j).getNodeName();
if (modifyNode.equalsIgnoreCase("age")) {
nl.item(j).getFirstChild().setTextContent("25");
}
}
}
}
modifyFile(document, "student.xml");
}
}
/**
* 采用SAX方式
* @author Stone
*
*/
@SuppressWarnings("unchecked")
public class SAXForXml extends DefaultHandler {
private Stack tags = new Stack();
private Map contents = new LinkedHashMap();
public int count = 0;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if ("name".equals(tag)) {
String name = new String(ch, start, length);
contents.put("name" + count, name);
}
if ("age".equals(tag)) {
contents.put("age" + count, new String(ch, start, length));
}
if ("sex".equals(tag)) {
contents.put("sex" + count, new String(ch, start, length));
}
if ("address".equals(tag)) {
contents.put("address" + count, new String(ch, start, length));
}
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("student".equals(qName)) {
count++;
}
tags.push(qName);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
tags.pop();
}
public Map getContents() {
return contents;
}
}
/**
* 采用JDOM方式
* @author Stone
*
*/
public class JDOMForXml {
}
/**
* 采用DOM4J方式
* @author Stone
*
*/
public class DOM4JForXml {
/**
* 获取doc对象(org.dom4j.Document)
* @param fileName
* @return
*/
public org.dom4j.Document getDocument(String fileName) {
SAXReader sr = new SAXReader();
org.dom4j.Document doc = null;
try {
doc = sr.read(new File(fileName));
} catch (Exception e) {
e.printStackTrace();
}
return doc;
}
/**
* 将文件保存到硬盘
* @param doc
* @param fileName
*/
public void writeToFile(org.dom4j.Document doc, String fileName) {
try {
Writer writer = new FileWriter(fileName);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(doc);
xmlWriter.close();
System.out.println(" 文件已经钝化!");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 遍历xml文件输出节点值
*
* @param fileName
*/
@SuppressWarnings("unchecked")
public void readXml(String fileName) {
org.dom4j.Document doc = getDocument(fileName);
List nameList = doc.selectNodes("/students/student/name");
List ageList = doc.selectNodes("/students/student/age");
List sexList = doc.selectNodes("/students/student/sex");
List addressList = doc.selectNodes("/students/student/address");
for (int i = 0; i < nameList.size(); i++) {
StringBuilder sb = new StringBuilder();
sb.append("name=" + ((Element) nameList.get(i)).getTextTrim());
sb.append(",age=" + ((Element) ageList.get(i)).getTextTrim());
sb.append(",sex=" + ((Element) sexList.get(i)).getTextTrim());
sb.append(",address="
+ ((Element) addressList.get(i)).getTextTrim());
System.out.println(sb.toString());
}
}
/**
* 根据姓名修改一个学生的信息
* @param name
* @param newValue
* @param fileName
*/
@SuppressWarnings("unchecked")
public void updateXml(String name, Map newValue, String fileName) {
org.dom4j.Document doc = getDocument(fileName);
List nameList = doc.selectNodes("/students/student/name");
Iterator iterator = nameList.iterator();
while (iterator.hasNext()) {
Element element = (Element) iterator.next();
if (name != null && name.equals(element.getText())) {
Element pe = element.getParent();
List childList = pe.elements();
for (int i = 0; i < childList.size(); i++) {
Iterator valueSet = newValue.entrySet().iterator();
while (valueSet.hasNext()) {
Map.Entry entry = (Map.Entry) valueSet.next();
String nodeName = ((Element) childList.get(i))
.getName();
String key = entry.getKey().toString();
if (key != null && key.equals(nodeName)) {
((Element) childList.get(i))
.setText((String) entry.getValue());
}
}
}
}
}
writeToFile(doc, fileName);
}
}
}
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
public class TestXml
{
@Test
public void testDomForXml()
{
HandleXML handleXml = new HandleXML();
HandleXML.DOMForXml domForXml = handleXml.new DOMForXml();
//解析
//domForXml.paseXml("student.xml");
// 新增
//domForXml.addNewNode("Sun", "20", "Man", "USA");
//删除
//domForXml.deleteNode("sun");
domForXml.updateNode("Stone");
}
@Test
public void testSAXForXml() throws Exception
{
HandleXML handleXml = new HandleXML();
HandleXML.SAXForXml saxForXml = handleXml.new SAXForXml();
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
javax.xml.parsers.SAXParser sp = saxFactory.newSAXParser();
sp.parse(new File("student.xml"), saxForXml);
Map contents = saxForXml.getContents();
Iterator keys = contents.keySet().iterator();
while (keys.hasNext())
{
String key = (String)keys.next();
System.out.println(key + ":" + contents.get(key));
}
}
@Test
public void testDom4jForXml()
{
HandleXML handleXml = new HandleXML();
HandleXML.DOM4JForXml dom4j = handleXml.new DOM4JForXml();
//解析xml
dom4j.readXml("student.xml");
Map newValue = new HashMap();
newValue.put("age", "26");
dom4j.updateXml("Stone", newValue, "student.xml");
}
}
分享到:
相关推荐
java操纵xml文件的读写,并根据xml生成树型菜单
解析器的介绍 文档对象模型(DOM)解析实例 SAX解析实例 DOM4J解析实例 JDOM解析实例 JAVA操纵XML 实例讲解
XMLBEANS简化Java对XML编程的应用研究,刘永环,,XMLBeans是把java类和xml 文档实例进行绑定的一种技术。XMLBean提供了很多种方法操纵XML,其中主要包括JavaBeans 、XML Cursor、XQuery。本文首先��
JAVA操纵XML 实例讲解 414 通过JAVA写数据到XML里面 415 内容总结 418 独立实践 418 第二十三章:HTML基础 419 学习目标 419 知识要点 420 HTML元素 420 标签属性 420 HTML基本标签 422 标题元素 422 HTML格式 427 ...
Dom4J采用XPath操纵XML教程及例子,提供入门教程,源代码及有关jar包,并提供对XPath的支持,包含基本的增删改查的操作,由此可举一反三
文档对象模型是HTML和XML文档的编程接口...可以说,要自由的操纵XML文件,就要用到DOM规范。DOM文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML文件中的元素便转化为DOM文档中的节点对象。
通常我们使用根据以下这些模型创建的API 来分析和操纵XML结构,这些模型可以是基于对象(基于树)的,如文档对象模型(Document Object Model,DOM);也可以是基于事件(基于流、推模型)的,如 Simple API for XML...
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
•XML技术(JAXP,SAAJ,JAX-RPC等):一个完整的技术套件操纵XML和构建基于标准的XML Web服务。 •JMX(Java管理扩展):设施管理设备,工具,流程和网络。 •JAAS(Java认证和授权):用于管理安全性的接口。
第四章 操纵持久化对象..................190 第五章 事务控制...191 第六章 高级映射...192 第七章 高级查询...196 HTML&java; script学习笔记.....................198 HTML: 超文本标记语言.......................
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
Cocoon最初的型态是一个简单的Java servlet,全部使用标准W3C组件:用文档对象模型(DOM)来解析文档,用XML来捕捉和格式化数据,用XSLT来转换数据和合并/操纵XML文档,并用XSL来管理文档的表示以便通过Web传送。...
使用JDBC,连接Java与MySQL数据库.通过Java语言去操纵数据库,对其进行增删改查操作.一个综合练习,实现了对书城数据库的增删改查,适合初学者练手.
为最新版本Java 2 SDK1.4而设计的测试代码;...数据和文件的管理与操纵;并行程序设计和线程;Swing(Java的GUI);大型图形用户界面的例子Sketcher;用Java语言实现打印功能;XML新技术及其应用。
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
第 5 部分: 操纵 DOM 第 6 部分: 建立基于 DOM 的 Web 应用程序 第 7 部分: 在请求和响应中使用 XML 第 8 部分:在请求和响应中使用 XML 第 9 部分: 使用 Google Ajax Search API 第 10 部分: 使用 JSON 进行数据...