xml的处理有两种方式dom和Sax

其中dom有3套api ,分别是dom和jdom和dom4j

 package com.gh.xml;

 import java.io.File;
import java.util.ArrayList;
import java.util.List; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Dom模式读取xml
* @author ganhang
*
*/
public class DomDemo {
public static void main(String[] args) throws Exception {
// 创建dom解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 创建一个dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// 关联文件
File f = new File("src/1.xml");
// 开始解析
Document doc = db.parse(f);// 传文件或者字节流
// 根据节点获取数据
NodeList nl = doc.getElementsByTagName("teacher");
List<Teacher> teachers = new ArrayList<Teacher>();
Teacher t = null;
for (int i = 0; i < nl.getLength(); i++) {
Node teacherNode = nl.item(i);// 获取每个teacher节点
// 得到节点的属性id的值
String str = teacherNode.getAttributes().getNamedItem("id")
.getNodeValue();
//System.out.println(str);
t = new Teacher();
t.setId(Integer.parseInt(str));
// 获取teacher节点下的所有子节点
NodeList childNodeList = teacherNode.getChildNodes();
//System.out.println(childNodeList.getLength());
for (int j = 0; j < childNodeList.getLength(); j++) {
// 注意teacher有三个子节点#text name #text
Node childNode = childNodeList.item(j);
//System.out.println(childNode.getNodeName());
// 取name的子节点的值
if ("name".equals(childNode.getNodeName())) {
t.setName(childNode.getFirstChild().getNodeValue());
}
}
teachers.add(t);
}
System.out.println(teachers);
}
}
 package com.gh.xml;

 import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder; public class JdomDemo {
public static void main(String[] args) throws Exception {
SAXBuilder sb = new SAXBuilder();// 创建jdom解析器
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("1.xml");
Document doc = sb.build(in);
//拿根元素
Element roote = doc.getRootElement();
//根据根元素拿子元素
List<Element> liste = roote.getChildren();
List<Teacher> teachers=new ArrayList<Teacher>();
Teacher t=null;//注意必须要在里面new,不然teachers添加的都是重复的t;
//遍历子元素,也可以返回一个iterator遍历;
for (int i = 0; i < liste.size(); i++) {
t=new Teacher();
Element e = liste.get(i);
t.setId(Integer.parseInt(e.getAttributeValue("id")));
t.setName(e.getChildText("name"));
teachers.add(t);
}
System.out.println(teachers);
}
}
 package com.gh.xml;

 import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* Dom4j 性能最好
* @author ganhang
*
*/
public class Dom4jDemo {
public static void main(String[] args) throws Exception {
SAXReader sr=new SAXReader();
File f=new File("src/1.xml");
Document doc=sr.read(f);
Element roote=doc.getRootElement();
Iterator<Element> iters=roote.elementIterator();
Teacher t=null;
List<Teacher> list=new ArrayList<Teacher>();
while(iters.hasNext()){
t=new Teacher();
Element e=iters.next();
t.setId(Integer.parseInt(e.attributeValue("id")));
t.setName(e.elementText("name"));
list.add(t);
}
System.out.println(list);
}
}
 package com.gh.xml;

 import java.io.InputStream;

 import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* SAX读xml
* @author ganhang
*
*/
public class SaxDemo {
public static void main(String[] args) throws Exception {
//创建SAX解析器工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
//创建sax解析器
SAXParser sp = spf.newSAXParser();
//用字符流读xml
InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("1.xml");
MyHandler dh=new MyHandler();//实例化引擎
//开始解析
sp.parse(is, dh);
System.out.println(dh.getList()); }
}
 package com.gh.xml;

 import java.util.ArrayList;
import java.util.List; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* Sax模式的事件处理引擎
* @author ganhang
*
*/
public class MyHandler extends DefaultHandler {
private List<Teacher> list = null;
private Teacher t = null;
private String flag = null;
//开始读入文件
@Override
public void startDocument() throws SAXException {
list=new ArrayList<Teacher>();
}
//开始读元素
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
flag = qName;
if ("teacher".equals(qName)) {
t=new Teacher();//注意要在这new一个新的Teacher不然list添加会重复
t.setId(Integer.parseInt(attributes.getValue("id")));
//System.out.println(t.getId());
}
}
//读字符数据
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if ("name".equals(flag)) {
t.setName(new String(ch, start, length));
//System.out.println(t.getName());
}
}
//结束元素时干嘛
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("teacher".equals(qName)) {
list.add(t);
//System.out.println(list.get(0));
}//System.out.println(t);
flag = null;
}
//结束文件时干嘛
@Override
public void endDocument() throws SAXException {
System.out.println("解析成功!");
//System.out.println(list.get(0));
}
public List<Teacher> getList() {
return list;
} }
 package com.gh.xml;

 public class Teacher {
private int id;
private String name; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public Teacher(int id, String name) {
this.id = id;
this.name = name;
}
public Teacher() {
super();
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}
 package com.gh.xml;

 import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* xml和对象之间的转换
* @author ganhang
*
*/
public class ObjectAndXmlDemo {
/**
* 把对象转成xml
* @param obj
* @param file
* @throws Exception
*/
public static void object2xml(Teacher obj,File file) throws Exception{
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(file));
XMLEncoder encode=new XMLEncoder(bos);
encode.writeObject(obj);
encode.flush();
encode.close();
bos.close();
System.out.println("写入成功");
}
/**
* xml转成对象
* @param file
* @return
* @throws Exception
*/
public static Teacher xml2object(File file) throws Exception{
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
XMLDecoder decode =new XMLDecoder(bis);
Teacher t=(Teacher)decode.readObject();
decode.close();
bis.close();
System.out.println("读入成功");
return t;
}
public static void main(String[] args) throws Exception {
//Teacher t=new Teacher(1,"小白");
//object2xml(t,new File("src/2.xml"));
System.out.println(xml2object(new File("src/2.xml")));
}
}

1.xml

 <?xml version="1.0" encoding="UTF-8"?>
<person>
<teacher id="1">
<name>小白</name>
<desc>hehe1</desc>
</teacher> <teacher id="2">
<name>小黑</name>
<desc>hehe2</desc>
</teacher>
<teacher id="3">
<name>小红</name>
<desc>hehe3</desc>
</teacher>
</person>

2.xml

 <?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_79" class="java.beans.XMLDecoder">
<object class="com.gh.xml.Teacher">
<void property="id">
<int>1</int>
</void>
<void property="name">
<string>小白</string>
</void>
</object>
</java>

java学习之xml的更多相关文章

  1. Java学习笔记XML(3)

    XML简介 XML即可扩展的标记语言.因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定. 目前为止所有的标记的语言都属于开源的语言.由W3C组织进行一个基本的维护. 因此大家学习这些 ...

  2. Java学习02-web.xml配置详解

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  3. Java学习笔记--xml构造与解析之Sax的使用

    汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...

  4. Java学习笔记——XML入门

    以下内容来自网络 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language). XML 是一种很像HTML的标记语言. XML 的设计宗旨是传输数据,而不是显示 ...

  5. Java学习-023-Properties 类 XML 配置文件读取及写入源代码

    之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFr ...

  6. Java学习笔记(十)——xml

    [前面的话] 学习过程中还是效率不够高,老是容易注意力不集中,着急啊.不能在这样了,要好好学习,好好努力. 学习过程中的小知识点总结,基础知识,选择阅读. [xml定义] 定义:可扩展标记语言(英语: ...

  7. 总结学习! xml与java对象转换 --- JDK自带的JAXB(Java Architecture for XML Binding)

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  8. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  9. 关于JAVA学习计划和感想

    学习计划第一阶段:    JAVA语言基础知识.包括异常.IO流.多线程.集合类.    要求:异常------掌握try-catch-finally的使用          IO流------掌握字 ...

随机推荐

  1. 【D3.V3.js系列教程】--(十二)坐标尺度

    [D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales ...

  2. python学习(序章)

    好久没写过笔记了,最近听说写博客笔记能使知识记忆更深刻,于是就开始写写,不为推广,只为增加记忆.好了,开始python的学习: 学习一门语言的快慢,与人无关,主要是与学习的目的有关,python语言目 ...

  3. HTTP初步注解

    搜集了一下网上的资源和自己看过的一些书,小小总结了一波HTTP,现在也只是很肤浅的了解,期望以后深入理解后能写出更有营养的笔记. HTTP协议的主要特点 + 支持客户/服务器模式.+ 简单快速:客户向 ...

  4. django1.4.5无法安装MySQLdb1.2.3

    解决办法是: yum install python-devel mysql-devel zlib-devel openssl-devel 然后再build.install

  5. jQuery selector 选择器

    基本选择器 1. id选择器(指定id元素)将id="one"的元素背景色设置为黑色.(id选择器返单个元素) $(document).ready(function () { $( ...

  6. 关于Python的self指向性

    Python的self是指向类的实例化对像,而不是类本身,每次调用类的实例化即self指向此实例化对像,如下代码: class Person: def __init__(self,name): sel ...

  7. IOS 表视图(UITableVIew)的使用方法(2)名单的分段显示

    我们可以采用名字分段法,名字分段会在之后的小节中显示,这是转而使用球员的角色分段发,以最直接的入手点讲解好UITableView的分段使用方法.本节示例时基于上节的SimpleTableViewCon ...

  8. mybatis获取插入的语句主键(自增主键)

    <insert id="insertUser" parameterType="User"> <selectKey keyProperty=&q ...

  9. verilog中always块延时总结

    在上一篇博文中 verilog中连续性赋值中的延时中对assign的延时做了讨论,现在对always块中的延时做一个讨论. 观测下面的程序,@0时刻,输入的数据分别是0x13,0x14 . @2时刻, ...

  10. Java使用freemarker导出word和excel

    www.linxiaosheng.com/post/2013-12-05/40060346181 https://github.com/upyun/java-sdk