XML的dom解析详解

前端之家收集整理的这篇文章主要介绍了XML的dom解析详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

DOM是文档对象模型解析,构建文档的分层语法结构,

在内存中建立DOM树,DOM树的节点以对象的形式来标识,

文档解析文成以后,文档的整个DOM树都会放在内存中。

DOM的优点:

1. 当文档的某一部分被多次的访问时,非常方便。

2. 需要对文档进行调整或者一次性的访问整个文档。

3. DOM可以随时的访问文档中的某个部分。

4. 可以避免一些无效的操作。

首先编写一个student.xml文件,再对这个xml文件进行解析

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student stuId="001">
		<stuName>公主</stuName>
		<stuAge>19</stuAge>
	</student>
	<student stuId="002">
		<stuName>王子</stuName>
		<stuAge>20</stuAge>
	</student>
	<student stuId="003">
		<stuName>灰姑娘</stuName>
		<stuAge>19</stuAge>
	</student>
</students>
接下来首先将这个student类进行一个封装
public class Student {
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "id:"+id+",name:"+name+";age:"+age;
	}
}
再利用dom开始解析
<pre name="code" class="java" style="font-size: 14px; line-height: 26px;">代码方法可以参考jdk-api:下载地址http://download.csdn.net/download/zhangvalue/9203511

 
<pre name="code" class="java">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.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;



public class Demo {

	public static void main(String[] args) throws Exception{

		Student stu = null;
		List<Student> list = new ArrayList<Student>();
		
		//--1、获得Dom对象的解析器工厂
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//--2、从工厂中获得Dom对象的解析器
		DocumentBuilder buidler = factory.newDocumentBuilder();
		//--3、解析器解析哪个文档--》文档的Dom对象
		Document dom = buidler.parse(new File("Students.xml"));
		//--4、访问文件根节点
		Element node = dom.getDocumentElement();
		//--5、获得根节点下的所有子节点
		NodeList nodeList = node.getChildNodes();
		//--6、遍历集合中的所有节点
		for(int i=0;i<nodeList.getLength();i++){
			//--子节点
			Node c_node = nodeList.item(i);
			
			if("student".equals(c_node.getNodeName())){
				
				stu = new Student();
				//--获得节点的所有属性
				NamedNodeMap map = c_node.getAttributes();
				//--获得相对应的属性值
				Node sxNode = map.getNamedItem("stuId");
				String stuId = sxNode.getNodeValue();
				stu.setId(Integer.parseInt(stuId));
				//--查询子节点下的所有子节点
				NodeList nList = c_node.getChildNodes();
				
				for(int j=0;j<nList.getLength();j++){
					Node c_c_node = nList.item(j);
					String bq = c_c_node.getNodeName();
					String wbnr = c_c_node.getTextContent();
					
					if("stuName".equals(bq)){
						stu.setName(wbnr);
					}
					if("stuAge".equals(bq)){
						stu.setAge(Integer.parseInt(wbnr));
					}
					
				}
				list.add(stu);
			}
			
			
		}
		
		for(int i=0;i<list.size();i++){
			System.out.println(list.get(i));
		}
		
	}

}
 
xml有两种解析方式这个是dom解析,还有sax解析方式已经写了可以去我的博客中的找找
本次的代码可以下载
具体代码可以下载链接:http://download.csdn.net/download/zhangvalue/9204199

猜你在找的XML相关文章