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>
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document document= db.parse("movies.xml");
NodeList movies=document.getElementsByTagName("Movie");
Node movie=movies.item(i);
NamedNodeMap attrs=movie.getAttributes();
NodeList childNoides=movie.getChildNodes();
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(); } } }