DOM 解析
1. DOM(Document Object Model)是一个文档对象组成的模型,这个模型将xml 文件视为树状结构,将其中的元素视为树状结构的节点
XML文件建立的整棵树状结构就是一个Document 对象,可以浏览xml 文件,增加 删除 修改节点的数据
DOM 是一个与语言无关的接口,采用builder模式
2. Node 对象是DOM中最主要的数据类型,他代表了文档树中的一个节点,Node 节点的种类:
Element 元素节点
Attr 属性节点
Text 文字内容节点
Comment 注释文字内容节点
Document XML文件根节点
3. DOM 解析的步骤:
(1)创建一个 DocumentBuilderFactory 对象,他使应用程序能够得到一个分析器
(2)可以对这个factory 对象设置参数
(3)从这个factory 对象生成一个DocumentBuilder 对象
(4)调用parse 方法解析xml 文件, 生产一个Document 对象
例子:
XML 文件:hr.xml
<?xml version="1.0" encoding="GB2312" ?>
<!-- 个人履历表-->
<resume>
<person id="01">
<name>张三</name>
<birthday>03/24/1975</birthday>
<phone>1111-1111</phone>
<address>大连</address>
</person>
<person id="02">
<name>李四</name>
<birthday>9/26/1978</birthday>
<phone>2222-2222</phone>
<address>南京</address>
</person>
<person id="03">
<name>王五</name>
<birthday>11/09/1979</birthday>
<phone>3333-3333</phone>
<address>武汉</address>
</person>
</resume>
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.*;
public class MyDomParser{
public static void main( String[] args ){
try{
// 创建一个document builder factory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 设置factory 的参数
//dbf.setValidating( true );
dbf.setNamespaceAware( true );
// 从factory 创建一个document builder
DocumentBuilder db = dbf.newDocumentBuilder();
// 导入xml 文件, 返回一个DOM Document 对象
Document doc = db.parse( "hr.xml" );
// 遍历DOM Document 对象
MyDomParser mdp = new MyDomParser();
mdp.traverseTree( doc );
}catch( Exception e ){
e.printStackTrace();
}
}
/**
* 递归遍历节点.
* 如果节点为null 则返回
* 如果节点的类型为DOCUMENT_NODE 则遍历根节点
* 如果节点的类型为ELEMENT_NODE 则打印元素名和属性,遍历子节点
* 如果节点的类型为TEXT_NODE 则打印出来
*/
public void traverseTree( Node node ) throws Exception {
if( node == null )
return;
int type = node.getNodeType();
switch( type ){
case Node.DOCUMENT_NODE:
Node root = ((Document)node).getDocumentElement();
traverseTree(root);
break;
case Node.ELEMENT_NODE:
// 打印元素名
String elementName = node.getNodeName();
System.out.println( elementName );
// 打印此元素的所有属性
NamedNodeMap attrs = node.getAttributes();
int length = attrs.getLength();
if( attrs != null && length != 0 ){
System.out.print( "attributes: " );
Node attrNode = null;
for( int i=0; i<length; i++ ){
attrNode = attrs.item(i);
System.out.print( attrNode.getNodeName() + "=" + attrNode.getNodeValue().trim() + "\t" );
}
System.out.println();
}
// 遍历子节点
NodeList childNodes = node.getChildNodes();
if( childNodes != null ){
length = childNodes.getLength();
for( int i=0; i<length; i++ )
traverseTree( childNodes.item( i ) );
}
break;
case Node.TEXT_NODE:
String text = node.getNodeValue().trim();
System.out.println( text );
}
}
}
XML文件建立的整棵树状结构就是一个Document 对象,可以浏览xml 文件,增加 删除 修改节点的数据
DOM 是一个与语言无关的接口,采用builder模式
2. Node 对象是DOM中最主要的数据类型,他代表了文档树中的一个节点,Node 节点的种类:
Element 元素节点
Attr 属性节点
Text 文字内容节点
Comment 注释文字内容节点
Document XML文件根节点
3. DOM 解析的步骤:
(1)创建一个 DocumentBuilderFactory 对象,他使应用程序能够得到一个分析器
(2)可以对这个factory 对象设置参数
(3)从这个factory 对象生成一个DocumentBuilder 对象
(4)调用parse 方法解析xml 文件, 生产一个Document 对象
例子:
XML 文件:hr.xml
<?xml version="1.0" encoding="GB2312" ?>
<!-- 个人履历表-->
<resume>
<person id="01">
<name>张三</name>
<birthday>03/24/1975</birthday>
<phone>1111-1111</phone>
<address>大连</address>
</person>
<person id="02">
<name>李四</name>
<birthday>9/26/1978</birthday>
<phone>2222-2222</phone>
<address>南京</address>
</person>
<person id="03">
<name>王五</name>
<birthday>11/09/1979</birthday>
<phone>3333-3333</phone>
<address>武汉</address>
</person>
</resume>
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.*;
public class MyDomParser{
public static void main( String[] args ){
try{
// 创建一个document builder factory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 设置factory 的参数
//dbf.setValidating( true );
dbf.setNamespaceAware( true );
// 从factory 创建一个document builder
DocumentBuilder db = dbf.newDocumentBuilder();
// 导入xml 文件, 返回一个DOM Document 对象
Document doc = db.parse( "hr.xml" );
// 遍历DOM Document 对象
MyDomParser mdp = new MyDomParser();
mdp.traverseTree( doc );
}catch( Exception e ){
e.printStackTrace();
}
}
/**
* 递归遍历节点.
* 如果节点为null 则返回
* 如果节点的类型为DOCUMENT_NODE 则遍历根节点
* 如果节点的类型为ELEMENT_NODE 则打印元素名和属性,遍历子节点
* 如果节点的类型为TEXT_NODE 则打印出来
*/
public void traverseTree( Node node ) throws Exception {
if( node == null )
return;
int type = node.getNodeType();
switch( type ){
case Node.DOCUMENT_NODE:
Node root = ((Document)node).getDocumentElement();
traverseTree(root);
break;
case Node.ELEMENT_NODE:
// 打印元素名
String elementName = node.getNodeName();
System.out.println( elementName );
// 打印此元素的所有属性
NamedNodeMap attrs = node.getAttributes();
int length = attrs.getLength();
if( attrs != null && length != 0 ){
System.out.print( "attributes: " );
Node attrNode = null;
for( int i=0; i<length; i++ ){
attrNode = attrs.item(i);
System.out.print( attrNode.getNodeName() + "=" + attrNode.getNodeValue().trim() + "\t" );
}
System.out.println();
}
// 遍历子节点
NodeList childNodes = node.getChildNodes();
if( childNodes != null ){
length = childNodes.getLength();
for( int i=0; i<length; i++ )
traverseTree( childNodes.item( i ) );
}
break;
case Node.TEXT_NODE:
String text = node.getNodeValue().trim();
System.out.println( text );
}
}
}
irini
2005-12-25 22:56:32
评论:0
阅读:325
引用:0
