DOM和JDOM解析XML文档

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

//XML文档
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personId="1">
<id>123456</id>
<address>876556</address>
<name>小明</name>
</person>
<person personId="2">
<id>54534</id>
<address>82934u832</address>
<name>小李</name>
</person>
</people>

再定义一个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");//获取元素节点
		
		ArrayList<Person>p=new ArrayList<>();
		Person p1=null;
		
		for(int i=0;i<node_person.getLength();i++){
			org.w3c.dom.Node personNode= node_person.item(i);
			p1=new Person();
			String personId=personNode.getAttributes().getNamedItem("personId").getNodeValue();
			p1.setPersonId(personId);
			NodeList childNodes=personNode.getChildNodes();
			for(int j=0;j<childNodes.getLength();j++){
				org.w3c.dom.Node item= childNodes.item(j);
				String nodeName=item.getNodeName();
				if("name".equals(nodeName)){
					p1.setname(item.getFirstChild().getNodeValue());
				}else if("id".equals(nodeName)){
					p1.setId(item.getFirstChild().getNodeValue());
				}else if("address".equals(nodeName)){
					p1.setadd(item.getFirstChild().getNodeValue());
				}
				p.add(p1);
				
			}
		}
		//迭代器迭代
		Iterator it=p.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}

 它和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;
	List<Person>p=new ArrayList();
	
	List<Element>children=rootElement.getChildren();
	for(Element element:children){
		person=new Person();
		String personId=element.getAttributeValue("personId");
		person.setPersonId(personId);
		List<Element>children1=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的方法

猜你喜欢

转载自blog.csdn.net/dtbk123/article/details/88596116