Java XML解析之DOM解析

DOM解析:基于XML文档树结构的解析。

解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。

特点:

随机访问XML文件,内容可修改

不适合大文档

节点类型=====java接口

Document Node:文档节点

包含一个根元素节点,多个处理指令节点

Document Fragment Node:碎片节点

Element Node:元素节点

包含其他元素节点,文本节点,属性节点

Attribute Node:属性节点

包含一个文本节点

Text Node:文本节点

Comment Node:注释节点

Processing Instruction Node:处理指令节点

Document Type node:文档类型节点

Entity Node:实体节点

Entity Reference Node:实体引用节点

常用接口:

Node:

public short getNodeType()

public String getNodeName()

public String getNodeValue()

public NameNodeMap getAttributes()

public NodeList getChildNodes()

Document:

包含创建各种节点的方法;

包含获取根节点的方法

编程步骤:

1.准备一个简单的xml文件-movies.xml,放入到Java项目中

<?xml version="1.0" encoding="UTF-8"?>
<Movies>
    <Movie id="1">
        <name>愤怒的小鸟</name>
        <type>animation</type>
        <year>2016</year>
    </Movie>
    <Movie id="2">
        <name>叶问</name>
        <type>action</type>
        <language>chinese</language>
    </Movie>
</Movies>

2.创建一个DocumentBuilderFactory对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

3.创建一个DocumentBuilder对象

DocumentBuilder db=dbf.newDocumentBuilder();

4.获取Document对象

Document document= db.parse("movies.xml");

5.拿到一个电影集合

NodeList movies=document.getElementsByTagName("Movie");


6.拿到一个节点

Node movie=movies.item(i);


7.拿到一个属性集合

NamedNodeMap attrs=movie.getAttributes();

8.拿到一个节点集合

NodeList childNoides=movie.getChildNodes();

9.完整代码:

public class Dom {

	public static void main(String[] args) {
		//1.创建一个DocumentBuilderFactory对象
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		//2.创建一个DocumentBuilder对象
		try {
			DocumentBuilder db=dbf.newDocumentBuilder();
			//3.获取Document对象
			Document document= db.parse("movies.xml");
			System.out.println("开始解析");
			//4.拿到一个电影集合
			NodeList movies=document.getElementsByTagName("Movie");
			System.out.println("共有"+movies.getLength()+"部电影");
			for(int i=0;i<movies.getLength();i++){
				System.out.println("--------------");
				System.out.println("正在解析第"+(i+1)+"部电影");
				//5.拿到一个节点
				Node movie=movies.item(i);
				//6.拿到一个属性集合
				NamedNodeMap attrs=movie.getAttributes();
				for(int j=0;j<attrs.getLength();j++){
					Node attr=attrs.item(j);
					System.out.print("属性名:"+attr.getNodeName()+" ");
					System.out.println("属性值:"+attr.getNodeValue());
				}
				//7.拿到一个节点集合
				NodeList childNoides=movie.getChildNodes();
				for(int k=0;k<childNoides.getLength();k++){
					Node child=childNoides.item(k);
					if(child.getNodeType()==Document.ELEMENT_NODE){
					System.out.println("节点名"+child.getNodeName());
					//System.out.println("节点值"+child.getNodeValue());
					System.out.println("节点值:"+child.getFirstChild().getNodeValue());
					}
				}
				System.out.println("第"+(i+1)+"部电影解析结束");
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}

10.效果图:

Java XML解析之DOM解析_第1张图片












你可能感兴趣的:(java,编程,xml,dom)