`

Java-dom编程:操作xml

 
阅读更多
package cd.itcast.day3.xmldom;

package cd.itcast.day3.xmldom;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
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.NodeList;

/**
 * 对Student对象的CRUD(增、查、改、删)操作.
 * 
 * @author Administrator
 * 
 */
public class StudentDAOXml {
	/**
	 * 得到文档对象
	 * @param doc
	 * @return
	 */
	private Document getDoc() {
		try{
			File f=new File("D:\\workspace\\base\\student.xml");
			if (f.exists()) {
				DocumentBuilderFactory factory = DocumentBuilderFactory
						.newInstance();
				DocumentBuilder builder = factory.newDocumentBuilder();
				return builder.parse(f);
			}else{
				Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
				doc.setXmlStandalone(false);
				doc.setXmlVersion("1.0");
				
				//创建根元素
				Element root=doc.createElement("students");
				doc.appendChild(root);
				return doc;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 把DOM对象同步到文件中
	 */
	private void dom2file(Document doc)
			throws TransformerFactoryConfigurationError {
		try {
			// 使用Transformer完成内存中的文档到文件的转换
			TransformerFactory factory = TransformerFactory.newInstance();
			Transformer transfer = factory.newTransformer();
			//源
			Source xmlSource=new DOMSource(doc);
			//目标
			Result outputTarget=new StreamResult(new File("D:\\workspace\\base\\student.xml"));
			//完成源到目标的转换
			transfer.transform(xmlSource, outputTarget);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 保存对象
	 * 
	 * 1,创建studentElement,设置属性
	 * 2,创建nameElement,设置内容
	 * 3,创建sexEl,设置内容
	 * 4,创建ageEl,设置内容
	 * 5,按顺序把el加到studentEl
	 * 6,把studentEl加到根节点里面
	 * 7,同步
	 * 
	 */
	public void save(Student s) {
		Document doc=this.getDoc();
		if(doc!=null){
			Element root=doc.getDocumentElement();
			
			Element stuEl=doc.createElement("student");
			stuEl.setAttribute("id", s.getId());
			
			Element nameEl=doc.createElement("name");
			nameEl.setTextContent(s.getName());
			
			Element sexEl=doc.createElement("sex");
			sexEl.setTextContent(s.getSex());
			
			Element ageEl=doc.createElement("age");
			ageEl.setTextContent(s.getAge().toString());
			
			stuEl.appendChild(nameEl);
			stuEl.appendChild(sexEl);
			stuEl.appendChild(ageEl);
			
			root.appendChild(stuEl);
		}
		this.dom2file(doc);
	}

	/**
	 * 修改对象
	 * 1,遍历得到给定id的studentEl
	 * 2,得到nameEl,并修改里面文本值
	 * 3,得到ageEl,并修改里面的文本值
	 * 
	 * 4,同步
	 */
	public void update(Student s) {
		Document doc=this.getDoc();
		if(doc!=null){
			Element root=doc.getDocumentElement();
			NodeList nl=root.getElementsByTagName("student");
			for(int i=0;i<nl.getLength();i++){
				Element stuEl=(Element)nl.item(i);
				if(s.getId().equals(stuEl.getAttribute("id"))){
					stuEl.getElementsByTagName("name").item(0).setTextContent(s.getName());
					stuEl.getElementsByTagName("sex").item(0).setTextContent(s.getSex());
					stuEl.getElementsByTagName("age").item(0).setTextContent(s.getAge().toString());
					break;
				}
			}
		}
		this.dom2file(doc);
	}

	/**
	 * 删除对象
	 * 1,找到要删除的那个element
	 * 2,删除element
	 * 3,同步到文件里面
	 */
	public void delete(String id) {
		Document doc = this.getDoc();
		if (doc != null) {
			Element root = doc.getDocumentElement();
			NodeList nl = root.getElementsByTagName("student");
			for (int i = 0; i < nl.getLength(); i++) {
				Element stuEl=(Element)nl.item(i);
				if(id.equals(stuEl.getAttribute("id"))){
					//删除这个节点
					stuEl.getParentNode().removeChild(stuEl);
					break;
				}
			}
			dom2file(doc);
		}
	}

	/**
	 * 根据id查询一个对象
	 */
	public Student get(String id) {
		Student s=null;
		Document doc=null;
		doc = getDoc();
		if(doc!=null){
			Element root=doc.getDocumentElement();
			NodeList nl=root.getElementsByTagName("student");
			for(int i=0;i<nl.getLength();i++){
				Element stuEl=(Element)nl.item(i);
				if(id.equals(stuEl.getAttribute("id"))){
					s=new Student();
					s.setId(stuEl.getAttribute("id"));
					s.setName(stuEl.getElementsByTagName("name").item(0).getTextContent());
					s.setSex(stuEl.getElementsByTagName("sex").item(0).getTextContent());
					s.setAge(Integer.parseInt(stuEl.getElementsByTagName("age").item(0).getTextContent()));
					break;
				}
			}
		}
		return s;
	}

	/**
	 * 查询所有的对象
	 * 思路:
	 * 把XML里面的student元素一个一个解析为Student对象实例
	 * 1,得到文档对象
	 ** 		*1,创建工厂
	 ** 		*2, 得到创建器
	 ** 		*3,使用创建器解析XML得到document文档对象
	 * 2,遍历student元素
	 ** 		*1,得到根节点
	 ** 		*2,得到所有的Student元素
	 ** 		*3,把每个student元素转成Student实例
	 ** 			*1,创建一个student实例
	 ** 			*2,得到ID元素设置到student里面
	 ** 			*3,得到name子元素,把那么子元素里面的子节点的内容设置到name属性
	 ** 			*4,得到age子元素,把那么子元素里面的子节点的内容设置到age属性
	 ** 			*5,装到结果集里面
	 * 4,返回结果集
	 */
	public List<Student> list() {
		List<Student> ss=new ArrayList<Student>();
		Document doc=null;
		doc = getDoc();
		if(doc!=null){
			Element root=doc.getDocumentElement();
			//根据元素的名称得到所有符合这个元素名称的元素节点
			NodeList nl=root.getElementsByTagName("student");
			for(int i=0;i<nl.getLength();i++){
				Element stuEl=(Element)nl.item(i);
				Student student=new Student();
				student.setId(stuEl.getAttribute("id"));
//				stuEl.getElementsByTagName("name").item(0).getChildNodes().item(0).getTextContent();
				student.setName(stuEl.getElementsByTagName("name").item(0).getTextContent());
				student.setSex(stuEl.getElementsByTagName("sex").item(0).getTextContent());
				student.setAge(Integer.parseInt(stuEl.getElementsByTagName("age").item(0).getTextContent()));
				ss.add(student);
			}
		}
		return ss;
	}

}


public class Student {
	private String id;
	private String name;
	private String sex;
	private Integer age;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", sex=" + sex
				+ ", age=" + age + "]";
	}

}
分享到:
评论

相关推荐

    java的xml编程(Dom)xmlReanAndWrite.rar-基本操作

    java的xml编程(Dom)xmlReanAndWrite.rar-基本操作 JAVA XML Dom 解压中有readMe.txt 阅读后操作即可!用最简单的例子了解其原理!

    Java与XML联合编程之DOM篇

    Java与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml dom

    Java与XML联合编程之DOM篇.rar_dom xml_dom xml java_java xml

    Java与XML联合编程之DOM篇 java中通过documentobjectmodule模型来解析xml文件 diamondsong提供

    Java实现用DOM文档和XML文件互换的操作

    利用DOM规范,可以实现DOM文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM规范。DOM文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML...

    XML-Java-Parser:一个 Java 程序,它接受一个目录并递归地解析 XML 文件以生成更小、更易读的文件,遵循某些限制

    Xml-Java-解析器 在 Houari Boumediene 科技大学通用计算机科学 (ACAD) 的第三年第一学期进行的结构化文档项目,用于“结构化文档和 XML”模块 目标 目标是获取一个包含预定义 XML 文件的目录,并递归浏览它,使用 ...

    Java与XML联合编程之DOM篇.doc

    Java与XML联合编程之DOM篇.doc

    Java and XML, 3rd Edition

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    Java语言编程中更新XML文档的四种常用方法

    本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣。其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述。 JAXP是Java API for XML Processing的英文字头缩写,中文...

    DOM编程接口的一些描述

    编程接口指应用程序访问XML文档的API,常用的有DOM、SAX和JDOM三种,及微软的MSXML和.NET的Xml、Java的JAXP三个。本章先概述XML之API的基本情况,然后分别介绍这三种和三个API的主要内容、编程方法和应用实例。

    JAVA与XML.rar

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    3.6cs架构-dom4j-在线考试系统(源码+文档).zip

    2. 理解容器对对象的操作,io流读写对象,XML存储数据,网络编程使用及对象的序列化以及相互结合的使用等知识。 3. 进一步掌握接口实现类面向接口、面向对象编程,以及继承封装多态java三大特征 4. 理解dao层、服务...

    基于UDP和TCP的Socket编程文件传输,DOM4J对于XML读写

    编写的一个基于UDP和TCP的Socket编程文件传输,UDP用来实现消息传递,TCP用来文件传输,使用DOM4J来进行XML的读写。代码清晰,希望大家喜欢。

    尚硅谷_javascriptDOM编程.pptx

    DOM:Document Object Model(文本对象模型) D:文档 – html 文档 或 xml 文档 O:对象 – document 对象的属性和方法 M:模型 ...DOM定义了Node的接口以及许多种节点类型来表示XML节点的多个方面

    用java技术进行xml编程

    IBM在线教程,主要介绍 Java 语言中处理 XML 文档最常用的编程接口。

    Java编程中更新XML文档的常用方法

    本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣。其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述。 JAXP是Java API for XML Processing的英文字头缩写,中文...

    dom4j xml解析

    dom4j解析xml所需jar包包含两个如果只导入dom4j编程过程中会报java.lang.IllegalStateException异常,需要添加jaxen版本的jar包

    Java与XML第三版本

    书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...

    JAVA编程百例+JAVA面试题集十套(经典)

    实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例70 使用JDOM解析XML 实例81 SERVLET读取COOKIE数据 实例86 JSP使用数据连接池 实例99 连接数据库 实例100 上传文件 面试题(很多企业都常常从这些面试题库中选题...

Global site tag (gtag.js) - Google Analytics