`

Java-dom编程:操作xml

    博客分类:
  • java
阅读更多
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 + "]";
	}

}
分享到:
评论

相关推荐

    商业编程-源码-简单的XML学生信息系统(注释清楚).zip

    - 使用编程语言(如Java、Python或C#)实现XML的读写操作,如Java的DOM、SAX库,Python的ElementTree模块。 - 编写类和方法来处理学生对象,如Student类,包含属性和方法。 - 应用程序界面:可能包含添加、查看、...

    商业编程-源码-XML 初级教程(一).zip

    - 开源库:如Java的DOM4J、SAX和JAXB,Python的ElementTree等,提供了丰富的API进行XML操作。 - 在线工具:XML在线解析器、验证器和格式化器可以帮助理解和调试XML文档。 通过这个初级教程,你将掌握XML的基本...

    Java XML编程指南

    - JDOM(Java Document Object Model)和DOM4J:提供与Java集合API相似的接口操作XML文档,便于数据库中的XML存储和检索。 - JDBC-XML:Java标准库中的接口,支持XML数据类型的SQL操作。 9. **XML安全**: - XML...

    XML_java_Dom的考生成绩管理

    Java DOM(Document Object Model)是处理XML文档的一种方式,它提供了访问和操作XML文档的API,允许程序员通过Java代码来创建、修改和遍历XML文档。 在“XML_java_Dom的考生成绩管理”这个项目中,我们可能涉及到...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    Java作为一种强大的编程语言,提供了多种处理XML的API,如DOM、SAX和StAX等。本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML...

    Java DOM 生成XML

    Java DOM(Document Object Model)是一种基于树形结构的XML文档处理模型,它允许程序员通过对象接口来访问和操作XML文档的各个部分。DOM为XML文档提供了一种内存中的表示方式,使得开发人员可以方便地创建、修改和...

    XML-DOM编程模型简单参考手册.doc

    总结,XML DOM编程模型是一种强大的工具,它允许开发者以编程方式处理XML文档,提供了标准化的API来创建、查询、更新和操作XML数据。DOM解析器的选用应根据具体需求,如文档大小、内存限制和性能要求等因素来决定。...

    xml高级编程.

    - JDOM:Java库,提供更简洁的API来操作XML。 - XML Beans:基于JavaBeans的XML处理库,支持XML的读写和修改。 5. 查询XML: - XPath:强大的路径语言,用于选取XML文档中的节点。 - XSLT(XSL Transformations...

    XML笔记+源码!!!!!!!!!!

    - DOM4J库:dom4j-1.6.1.zip是DOM4J的一个版本,它是一个Java的XML处理库,提供了强大的读写XML的功能,包括元素、属性、注释、处理指令等操作。 3. DOM4J使用方法: - 加载XML:使用SAXReader类读取XML文件,...

    xml解析之DOM

    - 加载XML文件:使用DOM解析器(如Java的`javax.xml.parsers.DocumentBuilderFactory`)创建一个解析器实例,并加载XML文件。 - 构建DOM树:解析器读取XML内容,生成一个完整的DOM树。 - 访问和操作节点:通过DOM...

    关于java的各种面试题

    - 在Java中处理XML:使用JAXB、DOM4J等库进行解析和生成。 9. **SQL**: - 数据库优化:索引的创建和使用,查询优化。 - 分区表:提高大数据量查询性能的方法。 - 触发器和存储过程:在业务逻辑中的应用。 ...

    axiom-dom-1.2.2.jar.zip

    在Java中,DOM API允许开发者以树形结构来访问和操作XML文档。 1. **Axiom库**: Axiom是Apache的下一代XML消息处理库,它是Axis2项目的一部分,设计用于替代老版的SOAP引擎。Axiom提供了一种高效、灵活且可扩展的...

    xml从基础到精通实例教程

    - JavaScript:DOM API用于操作XML,还可以使用Ajax异步加载XML数据。 - Java:DOM、SAX、StAX等API处理XML,JAXB用于对象与XML之间的映射。 - .NET:System.Xml命名空间提供各种XML处理工具,如XmlDocument和...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    在Java编程环境中,解析XML文件是一项常见的任务,特别是在数据处理和集成中。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据。本教程将介绍如何使用Java解析XML文件,并将解析...

    axiom-dom-1.2.11.jar.zip

    总结来说,"axiom-dom-1.2.11.jar.zip"这个压缩包提供了Apache Axiom的一个DOM实现,它结合了DOM的强大功能和Axiom的性能优势,为Java开发者提供了高效、灵活的XML处理工具。在理解并熟练使用这个库后,开发者能够更...

    Java通用范例开发金典源代码

    《Java通用范例开发金典源代码》是一个包含大量Java编程示例的资源集合,旨在帮助开发者深入理解和掌握Java编程语言的各种特性和应用场景。这个压缩包文件中的源代码覆盖了Java语言的基础到高级各个方面,是Java学习...

Global site tag (gtag.js) - Google Analytics