DOM解析XML文件(读取)

DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式。

一般分为以下几步:

1.定义好目标XML文件路径path

2.实例化DOM解析工厂对象,DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(),这种工厂类都不能用new的方式直接产生对象,必须用调用类的newInstance方法来产生对象。

3.用上面的工厂对象生成DOM解析器对象,DocumentBuilder builder = factory.newDocumentBuilder()。

4.用解析器对象对目标XML文件进行解析,得到Document文件对象,Document doc = builder.parse(path)。

5.处理Document文件,获得XML文件的所有信息。得到上面的doc对象也就相当于得到了树的根节点,就可以逐步对这可dom树进行遍历获得所有的节点信息,由于树的定义就是递归定义的,所以这里的遍历采用递归的思想最为简单。

代码如下:

首先是目标XML文件

<?xml version="1.0" encoding="utf-8"?>
<student>
	<stu num="1111">
		<name>张三丰</name>
		<sex>男</sex>
		<cla>武当</cla>
	</stu>
	<stu num="2345">
		<name>小龙女</name>
		<sex>女</sex>
		<cla>古墓</cla>
	</stu>
</student>

 然后是解析的代码:

 

public class Domparse {
	//用来保存解析出来的学生对象的动态链表
	static ArrayList<Student> list = new ArrayList<Student>();
	static Student stu;
	public static void main(String[] args) throws Exception {
		String path = "D:\\xmlEX\\student2.xml";
		//实例化一个用来产生DOM解析器的工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//使用工厂得到一个DOM解析器对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		//解析指定的xml文件或者数据流买得到DOM对象
		Document doc = builder.parse(path);
		//通过DOM对象获得其中的数据,递归进行遍历
		parseXML(doc);
		for(Student s:list){
			System.out.println(s);
		}
	}
	/**
	 * 递归解析XML文件
	 * @param doc 
	 */
	public static void parseXML(Node doc){
		//获得doc的所有子节点
		NodeList nodes = doc.getChildNodes();
		//遍历所有子节点
		for(int i=0;i<nodes.getLength();i++){
			Node node1 = nodes.item(i);
			//获得节点的名字
			String str = node1.getNodeName();
			//如果这个节点是一个元素节点
			if(node1 instanceof Element){
				//如果节点名字为stu则创建一个student对象存入队列,并且获得它的num属性
				if(str.equals("stu")){
					stu = new Student();
					list.add(stu);
					//获得该元素节点的num属性
					String num = ((Element)node1).getAttribute("num");
					stu.num = Integer.parseInt(num);
				}else if(str.equals("name")){
					stu.name = node1.getTextContent();
				}else if(str.equals("sex")){
					stu.sex = node1.getTextContent();
				}else if(str.equals("cla")){
					stu.cla = node1.getTextContent();
				}
			}
			parseXML(node1);
		}
	}
}

 

你可能感兴趣的:(java,xml,解析,dom)