DOM和JDOM解析XML文档

先前用SAX解析了XML文档,今天用DOM和JDOM来解析。首先来说一下DOM,它是文档对象模型,它的特性是定义一组Java接口,基于对象,与语言和平台无关,将XML文档表示成树,在内存中解析和存储XML文档,允许随机访问文档的不同部分。它的优点是可以修改后更新,还可以在任何时候在树中导航,API用起来也简单。下面来看下代码

//XML文档



123456
876556
小明
54534
82934u832
小李

再定义一个Person类

public class Person {
private String id;
private String address;
private String name;
private String personId;
public void setPersonId(String personId){
	this.personId=personId;
}

public String getPersonId(){
	return personId;
}
public void setId(String id){
	this.id=id;
}
public void setadd(String address){
	this.address=address;
}

public void setname(String name){
	this.name=name;
}
public String getId(){
	return id;
}
public String getname(){
	return name;
}
public String getadd(){
	return address;
}

}

接下来便是解析过程

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.soap.Node;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;



public class DOMparse {
	@Test
	public void Domparse() throws ParserConfigurationException, SAXException, IOException{
		DocumentBuilderFactory builder=DocumentBuilderFactory.newInstance();//创建一个DOM解析器工厂对象
		DocumentBuilder db=builder.newDocumentBuilder();//通过工厂对象创建解析器对象
		InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("com/vince/xml/Person.xml");//获取文件
		Document doc=db.parse(is);//从内存中读取数据
		NodeList node_person=doc.getElementsByTagName("person");//获取元素节点
		
		ArrayListp=new ArrayList<>();
		Person p1=null;
		
		for(int i=0;i

 它和XML比更消耗内存,比较适合j2ee开发。

接下来是JDOM解析器,首先要引入第三方开源组件,即jdom的jar包,它和DOM的区别还在于使用Java的collection接口,效率比DOM高

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.junit.Test;

public class JDOMParse {
	@Test
public void JDOMParse() throws JDOMException, IOException{
	SAXBuilder builder=new SAXBuilder();
	InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("com/vince/xml/Person.xml");//获取文件
	Document build=builder.build(is);
	Element rootElement=build.getRootElement();
	Person person=null;
	Listp=new ArrayList();
	
	Listchildren=rootElement.getChildren();
	for(Element element:children){
		person=new Person();
		String personId=element.getAttributeValue("personId");
		person.setPersonId(personId);
		Listchildren1=element.getChildren();
		
		for(Element e:children1){
			String tag=e.getName();
			if("name".equals(tag)){
				person.setname(e.getText());
			}else if("address".equals(tag)){
				person.setadd(tag);
			}else if("id".equals(tag)){
				person.setId(tag);
			}
		}p.add(person);
	}
	Iterator p1=p.iterator();
	while(p1.hasNext()){
		System.out.println(p1.next());
	}
}
}

以上便是两种解析XML的方法

你可能感兴趣的:(Java)