博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DOM 解析操作知识
阅读量:4958 次
发布时间:2019-06-12

本文共 5086 字,大约阅读时间需要 16 分钟。

DOM 相关知识整理

 

1. DOM, 全名为 Document Object Model, 文档对象模型。基于 DOM 的 XML 分析器将一个 XML 文档转换成一个对象模型的集合,通常称为 DOM 树,应用程序正是通过对这个对象模型的操作,来实现对 XML 文档数据的操作。也成为随机访问机制。

2. DOM 分析器把整个 XML 文档转化成 DOM 树放在内存里,当文档较大或者结构较复杂时,对内存的需求比较高。

3. DOM 的四个核心操作接口:

Document: 此接口代表了整个 XML 文档,表示整个 DOM 树的根,提供了对文档中的数据进行访问和操作的入口。通过 Document 节点可以访问 XML 文件中所有的元素数据。

 常用方法:

public NodeList getElementsByTagName (string tagname) // 取得指定节点名称的 NodeList

public Element createElement(String tagName) throws DOMException // 创建一个指定名称的节点

public Text createTextNode(String data) // 创建一个文本内容节点

Element createElement(String tagName) throws DOMException  //创建一个节点元素

public Attr createAttribute(String name) throws DOMException  //创建一个属性

 

Node: 此接口在整个 DOM 树中具有举足轻重的低位,DOM 操作的和新接口中有很大一部分接口是从 Node 接口中继承过来的。

常用方法:

Node appendChile(Node newChile) throws DOMException  // 在当前节点下增加一个新节点

public NodeList getChileNodes()  //取得本节点下的全部子节点

public Node getFirstChile()  //取得本节点下第一个子节点

public Node getLastChile()  //取得本几点下最后一个子节点

public boolean hasChileNodes()  //判断是否还有其他节点

public boolean hasAttributes()  //判断是否还有其他属性

String getNodeValue() throws DOMException  //取得节点内容

NodeList: 此接口表示一个节点的集合,一般用于表示有顺序关系的一组节点。

常用方法:

public int getLength()  //取得节点的个数

public Node item(int index)  //根据索引取得节点对象

 

NamedNodeMap:此接口表示一组节点和其唯一名称对应的一一对应关系,主要用于属性节点的表示。

 

进行 DOM 解析操作的基本操作流程:

1. 建立 DocumentBuilderFactory: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2. 建立 DocumentBuilder: DocumentBuilder builder = factory.newDocumentBuilder();

3. 建立 Document: Document doc = builder.parse("要读取的文件路径");

4. 建立 NodeList: NodeList nl = doc.getElementsByTagName("读取节点");

5. 进行 XML 信息读取。

 

下面的代码是一个简单的读取节点的例子,sample 文件如下

<?xml version="1.0" encoding="GBK"?>

<addresslist>

  <name>Tiky</name>

</addresslist>

import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOMDemo01 {    /**     * @param args     * @throws ParserConfigurationException      */    public static void main(String[] args){        // TODO Auto-generated method stub        //建立 DocumentBuilderFactory, 以取得 DocumentBuilder        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        //通过 DocumentBuilderFactory,取得 DocumentBuilder        DocumentBuilder builder = null;        try {            builder = factory.newDocumentBuilder();        } catch (ParserConfigurationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                Document doc = null;                try {            doc=builder.parse("D:\\test"+File.separator+"test.xml");        } catch (SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                NodeList nl= doc.getElementsByTagName("name");                System.out.println("姓名:"+ nl.item(0).getFirstChild().getNodeValue());}}

 注释:

1. 在 DOM 解析中,每一个节点的内容实际上都是一个单独的文本节点,所以以下语句表示的是

nl.item[0].getFirstChile().getNodeValue()

取得 name 节点下的第一个子节点的第一个文本节点,并通过 getNodeValue()取得了节点的内容。

 

 下面的例子是一个带循环的输出节点的例子,sample 文件如下

<?xml version="1.0" encoding="UTF-8"?>

<menutree>
<item>
<main>
<text>软件要求</text>
<url>movies/软件要求.swf</url>
<fps>30</fps>
<width>800</width>
<height>600</height>
</main>
</item>
<item>
<main>
<text>本地化思想</text>
<url>movies/本地化思想.swf</url>
<fps>30</fps>
<width>800</width>
<height>600</height>
</main>
</item>
<item>
<main>

</menutree>

 

代码:

import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOMDemo01 {    /**     * @param args     * @throws ParserConfigurationException      */    public static void main(String[] args){        // TODO Auto-generated method stub        //建立 DocumentBuilderFactory, 以取得 DocumentBuilder        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        //通过 DocumentBuilderFactory,取得 DocumentBuilder        DocumentBuilder builder = null;        try {            builder = factory.newDocumentBuilder();        } catch (ParserConfigurationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                Document doc = null;                try {            doc=builder.parse("D:\\test"+File.separator+"test.xml");        } catch (SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                NodeList nl= doc.getElementsByTagName("item");                for (int i=0; i

 

 

转载于:https://www.cnblogs.com/TikyZheng/archive/2012/09/18/2690234.html

你可能感兴趣的文章
我最喜欢的 5 个 Gedit 插件
查看>>
OOoLatex:在 OpenOffice.org 中拔出 Latex 公式
查看>>
linu学习第二天:文件系统相关操作
查看>>
执行了的程序,才是你的程序.
查看>>
国内使用Google Maps JavaScript API
查看>>
在AxureRP8中实现广告文字滚动效果
查看>>
javaScript 事件流---冒泡 && 捕获
查看>>
原型和继承 constructor、prototype、__proto__
查看>>
jQuery获取CSS样式中的颜色值的问题
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
Sqlite文件在ubunut的查看
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
kettle 数据库连接失败
查看>>
ListView失去焦点选中行不能高亮显示的问题解决
查看>>
# jsp及servlet学习笔记
查看>>
Kconfig详解
查看>>
关于linux发行版i386/i686/x86-64/的区别
查看>>
SPListTemplateType 枚举 (Microsoft.SharePoint) 创建列表时的ListTemplate Type属性
查看>>
利用private font改变PDF文件的字体
查看>>