java学习之xml
2016-01-24 00:00
369 查看
xml的处理有两种方式dom和Sax
其中dom有3套api ,分别是dom和jdom和dom4j
1.xml
2.xml
其中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学习之内省
- java学习之反射
- java学习之动态代理模式
- java中的length属性和length()方法和size()方法
- java学习之观察者设计模式
- java学习之url
- 记录ubuntu14安装jdk的过程
- junit入门
- java学习之线程池的实现
- Java多线程梳理
- java学习之生产者和消费者案例
- java之文件夹遍历
- Java反射机制
- java学习之线程的操作方法
- java并发编程——ExecutorService\join\yield
- java学习之IO装饰设计模式
- [JavaEE]JaveEE遇到的的问题
- java学习之IO文件分割
- java学习之IO对象流
- java中的String类常量池详解