package 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 + "]";
}
}
分享到:
相关推荐
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等场景。...在"jdom解析XML的实用例程"这个主题下,你可以深入学习并实践这些知识,提升你的XML处理技能。
JAVA 网络编程服务器端例程,一个测试socket通信的比较好的例程
Java程序设计教程教材例程是学习Java编程的重要资源,它由雍俊海教授在第二版的《Java程序设计教程》中提供。这个压缩包包含了教材每一章节中的所有示例代码,旨在帮助读者深入理解Java语言的基本概念、语法结构以及...
xml4c 解析器(含例程), C++编写, 在VC6 环境下配置好工程路径,即可编译. 如果路径配置有疑难问题, 可留言 QQ: 414135435
vtd-xml源码+例程,方便快捷入门,里面包含有vtd-xml的c++源码
java设计模式详细解析,通过实例介绍23种设计模式,以chm格式提供,方便查阅。
Java学习基本例程是针对初学者设计的一系列源代码示例,旨在帮助新手逐步掌握Java编程语言的基础知识。这些程序通常包含简单的语法结构、数据类型、控制流程、类与对象等核心概念,让学习者通过实践来理解理论。 1....
1. 解析器:读取XML文档并转换为内存中的数据结构,如DOM或SAX解析器。 2. DTD(Document Type Definition):定义XML文档结构的规则,用于验证文档是否符合规定。 3. XSD(XML Schema Definition):更现代的验证...
java串口通信,压缩包包含rxtxcomm以及javacomm20例程,以及一个test例程,已测试。
Java 教材中的例程.zip
基于Java的扫雷、俄罗斯方块、聊天工具、五子棋,游戏例程。
在“java例程100例”中,我们聚焦于Java编程语言,这是一个对初学者极其宝贵的资源。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、安全性及高效性能而闻名。以下是对每个标签及其相关的Java知识点的详细...
JAVA的基础例程,一些关于java的简单程序代码与文档,有助于JAVA基础薄弱的人快速提高,而且也有助于一般的开卷考试课哦,其中一定有你需要的
解析器负责读取XML文件并将其转换为内存中的对象模型,DOM则是XML文档的树形表示,允许程序以结构化方式访问和修改XML内容。 第十一章至第十三章可能讲解SOAP(Simple Object Access Protocol)和Web服务。SOAP是...
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
例如,parseXmlResource 方法用于解析 XML 文件,returnXml 方法用于将 XML 文件转换为字符串。 ```java public String parseXmlResource(String xmlFileName, String encoding) throws Exception { // 实现从 XML...
这个“简单JAVA例程(绝对新手实例)”的压缩包文件提供了入门级别的Java代码示例,帮助新手逐步认识和了解Java编程。 首先,让我们来探讨Java的基础知识: 1. **Java语法基础**:Java的语法结构与C++类似,但更加...
TinyXML2简单使用例程,包含xml的创建与读写,元素嵌套使用等情况,代码简单明了,注释清晰,以供参考
这个"Java数据库开发简单例程"提供了基础的示例,旨在帮助初学者理解和掌握如何使用Java与数据库进行交互。以下是该例程中可能涵盖的关键知识点: 1. JDBC(Java Database Connectivity):JDBC是Java中用于连接...