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 解压中有readMe.txt 阅读后操作即可!用最简单的例子了解其原理!
Java与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml dom
Java与XML联合编程之DOM篇 java中通过documentobjectmodule模型来解析xml文件 diamondsong提供
利用DOM规范,可以实现DOM文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM规范。DOM文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML...
Xml-Java-解析器 在 Houari Boumediene 科技大学通用计算机科学 (ACAD) 的第三年第一学期进行的结构化文档项目,用于“结构化文档和 XML”模块 目标 目标是获取一个包含预定义 XML 文件的目录,并递归浏览它,使用 ...
Java与XML联合编程之DOM篇.doc
《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...
本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣。其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述。 JAXP是Java API for XML Processing的英文字头缩写,中文...
编程接口指应用程序访问XML文档的API,常用的有DOM、SAX和JDOM三种,及微软的MSXML和.NET的Xml、Java的JAXP三个。本章先概述XML之API的基本情况,然后分别介绍这三种和三个API的主要内容、编程方法和应用实例。
《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...
2. 理解容器对对象的操作,io流读写对象,XML存储数据,网络编程使用及对象的序列化以及相互结合的使用等知识。 3. 进一步掌握接口实现类面向接口、面向对象编程,以及继承封装多态java三大特征 4. 理解dao层、服务...
编写的一个基于UDP和TCP的Socket编程文件传输,UDP用来实现消息传递,TCP用来文件传输,使用DOM4J来进行XML的读写。代码清晰,希望大家喜欢。
DOM:Document Object Model(文本对象模型) D:文档 – html 文档 或 xml 文档 O:对象 – document 对象的属性和方法 M:模型 ...DOM定义了Node的接口以及许多种节点类型来表示XML节点的多个方面
IBM在线教程,主要介绍 Java 语言中处理 XML 文档最常用的编程接口。
本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣。其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述。 JAXP是Java API for XML Processing的英文字头缩写,中文...
dom4j解析xml所需jar包包含两个如果只导入dom4j编程过程中会报java.lang.IllegalStateException异常,需要添加jaxen版本的jar包
书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...
实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例70 使用JDOM解析XML 实例81 SERVLET读取COOKIE数据 实例86 JSP使用数据连接池 实例99 连接数据库 实例100 上传文件 面试题(很多企业都常常从这些面试题库中选题...