XML解析之DOM解析
来源:互联网 发布:c11多线程编程 编辑:程序博客网 时间:2024/05/16 00:37
DOM是W3C制定的书写XML分析器的标准接口规范。DOM的全称是Document Object Model,即文档对象模型。基于DOM的解析器将一个XML文档转换成一个对象模型的集合即DOM数。DOM强制使用树模型来访问XML文档中的信息,也是因为XML本质上就是一种分层结构。DOM分析器把整个XML文档转化成DOM树放在内存中,当文档较大或者结构比较复杂时,内存需求较高。DOM树采用随机访问的方式任意控制整个XML文档的内容。
DOM常见节点
元素:XML的基本构件,有其他元素、文本节点或者两者兼有来作为其子结点
属性:包含元素节点的信息,不是元素的子结点
文本:文本节点也即文本,可以包含很多信息或仅仅是空白
文档(根节点):文档节点是文档中所有其他节点的父节点。
其他不常见节点类型:CDATA、注释、处理指令
DOM的四个基本接口:Document、Node、NodeList、NamedNodeMap
Document接口:对文档进行操作的入口,从Node接口继承而来。
Node接口:其他大多数接口的父类,如Document、Element、Attribute、Text、Comment等
NodeList接口:是一个节点的集合,包含某个节点的所有子结点。
NamedNodeMap接口:也是一个节点的集合,通过他可以建立节点名和节点之间的一一映 射关系,直接利用节点名访问特定的节点。
DOM解析器解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象,通过存取这些对象就能够存取XML文档的内容。
DOM的基本对象
Node对象:DOM结构中最基本的对象
Document对象:代表整个XML文档
NodeList对象:包含一个或多个Node的列表
Element对象:代表XML文档的标签元素
DOM处理XML文档,首先建立一个解析器工厂(DocumentBuilderFactory),解析器工厂根据平台属性创建具体的解析器(DocumentBuilder),然后用DocumentBuilder的parse()方法,返回Document对象。Document对象代表了一个XML树模型。对XML的操作,就脱离了解析器,直接操作Document这个对象
示例:
import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomXml {public static void main(String[] args) throws Exception {//创建一个DOM解析器工厂DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//解析器工厂根据平台属性创建具体的解析器DocumentBuilder db = dbf.newDocumentBuilder();//解析器解析具体的XML文件,返回一个代表整个XML文档的DocumentDocument doc = db.parse(new File("web.xml"));//返回一个标签名为servlet的节点集合NodeList list = doc.getElementsByTagName("servlet");//返回一个标签名为servlet-mapping的节点集合NodeList list2 = doc.getElementsByTagName("servlet-mapping");for(int i = 0 ; i < list.getLength(); i++) {Element node = (Element) list.item(i);//获得标签名为servlet-name的节点Element node1 = (Element) node.getElementsByTagName("servlet-name").item(0);//获得标签名为servlet-class的节点Element node2 = (Element) node.getElementsByTagName("servlet-class").item(0);Element node_0 = (Element)list2.item(i);//获得标签名为url-pattern的节点Element node3 = (Element)node_0.getElementsByTagName("url-pattern").item(0);//打印具体结果System.out.println("servlet-name: " + node1.getTextContent());System.out.println("servlet-class: " + node2.getTextContent());System.out.println("url-pattern: " + node3.getTextContent());System.out.println();}}}
控制台输出:servlet-name: HelloWorldservlet-class: com.shengsiyuan.servlet.HelloWorldServleturl-pattern: /aaaservlet-name: LoginServletservlet-class: com.shengsiyuan.servlet.LoginServleturl-pattern: /LoginServlet被解析的XML文档:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>com.shengsiyuan.servlet.HelloWorldServlet</servlet-class> </servlet> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.shengsiyuan.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/aaa</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> </web-app>
详细请查看:http://edu.csdn.net/heima
- XML解析之DOM解析
- XML解析之DOM解析
- xml解析之----DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- xml解析之dom解析
- 解析xml之--DOM
- xml解析之Dom
- XML解析之 DOM
- XML解析之Dom
- XML解析之DOM
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用15
- RMAN简明教程之一——RMAN的概念与体系结构
- fstream
- 让Excel Xp使用旧版本的Ole Db Provider
- 关于宽字符
- XML解析之DOM解析
- 实习日记037(9月8日)
- VI常用技巧
- Eclipse使用前准备
- 全排列 c++
- Effective C++读书笔记之六
- 全文检索、数据挖掘、推荐引擎系列6---基于KMean的文本自动算法
- hdu 3120 dolphin
- (转)VC调用C#动态库,建立ARX FOR VC工程