DOM

XML文档解析技术

  • XML本身是以纯文本对数据进行编码的一种格式,XML文档常被应用于数据的交互和传输,因此如何读写XML文档就显得非常重要。

  • 目前比较流行的XML文档解析技术包括:DOM、SAX、JDOM、DOM4J、Digester

  • DOM
    DOM是Document Object Model的缩写,即文档对象模型。它是由W3C组织推荐的处理XML的标准接口。2004年4月,W3C组织发布了DOM Level3 Core的推荐标准。DOM可用于直接访问 XML 文档的各个部分。在 DOM 中,文档被模拟为树状,其中 XML 语法的每个组成部分(例如元素或文本内容)都被表示为一个节点。

  • SAX
    SAX是Simple API for XML的缩写,被翻译为XML的简单应用程序接口,它是一种XML解析的方法。SAX最初是由David Megginson采用Java语言开发,之后SAX很快在Java开发者中流行起来,参与开发的程序员越来越多,组成了互联网上的XML-DEV社区。1998年5月发布了SAX1.0版,目前SAX最新的版本为2.0。

  • JDOM
    JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果, 2000 年初在类似于 Apache 协议的许可下,JDOM 作为一个开放源代码项目正式开始研发了。目前它已成长为包含来自广泛的 Java 开发人员的投稿、集中反馈及错误修复的系统,并致力于建立一个完整的基于 Java 平台的解决方案,通过 Java 代码来访问、操作并输出 XML 数据.

  • DOM4J
    DOM4J是dom4j.org出品的一个开源XML解析包,Dom4j是一个易用的、开源的库,用于XML、XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP.

  • Digester
    Digester是apache基金会的一个开源项目。Digester基于规则的XML文档解析,主要用于XML到Java对象的映射.Digester是在DOM和SAX的基础上衍生出来的工具类,为的是满足将 XML 转换为 JavaBean 的特殊需求,故而没有什么特别明显的优缺点开源框架Struts 的 XML 解析工具 Digester,为我们带来了将XML 转换为 JavaBean 的可靠方法。

  • DOM与SAX比较
    在这里插入图片描述
    SAX适用于处理下面的问题:
    对大型文件进行处理;
    只需要文件中的部分内容,或者只需要从文件中获取特定的信息;
    需要建立自己的对象模型。
    DOM适用于解决的问题类型:
    需要对文件进行修改;
    需要随机对文件进行存取。

  • JAXP是Java API for XML Processing的英文字头缩写,是用于XML文档处理的、使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准,屏蔽具体厂商实现、让开发人员以一种标准的方式对XML进行编程的规范。
    在这里插入图片描述

使用DOM来解析XML文档

  • DOM的核心概念即节点,因为DOM在分析XML文档时把所有的内容都映射为节点。所有的节点形成一个树形结构,我们通过访问这棵节点树来访问XML文档。Node代表了Dom模型的一个抽象节点,并没有具体的节点类型。
  • Node接口的主要方法
    在这里插入图片描述
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
			         DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(new File("被解析的XML文件名称"));
} catch (ParserConfigurationException e) {
	e.printStackTrace();
}
  • Element
    一个Element对象代表了DOM树的一个元素节点,元素节点是组成文档树的重要部分。通常,元素节点拥有子元素、文本节点或者两者的组合。
    NodeList getElementsByTagName(String name) 返回一个NodeList对象,包含指定元素的所有子元素
    String getTagName() 返回一个代表这个标签名字的字符串
    String getAttribute(String name) 通过名称获得属性值

  • Attr
    一个Attr对象代表了元素的一个属性。DOM不认为属性节点是DOM文档树的一个独立部分,因此属性节点的父节点、同胞节点等都是null。DOM认为属性节点是元素节点的一个组成部分
    String getName() 返回此属性的名称
    String getValue() 该属性值以字符串形式返回
    Element getOwnerElement() 此属性连接到的 Element 节点;如果未使用此属性,则为 null。

  • Text
    Text节点用于代表XML文档中元素和属性中的文本内容。文本节点可以只包含空白,因此如果元素的内容中包含空白,那么该元素节点的子节点中,也将包含以空白组成的文本节点。
    String getWholeText() 返回 Text 节点的所有文本
    boolean isElementContentWhitespace() 返回此文本节点是否包含 元素内容空白符,即经常所称的“可忽略的空白符”。

  • CDATASection用于代表XML文档中的CDATA部分的内容,DOM解析器只能识别出CDATA的结尾标记“]]>”,并以此作为CDATA的分界符。CDATA段节点表示XML文档中的CDATA段。在DOM API中,CDATA段节点是通过org.w3c.dom.CDATASection接口来表示的。

  • NodeList org.w3c.dom.NodeList接口提供了一个有序节点集合的抽象。
    int getLength() 该方法返回列表中节点的数目
    Node item(int index) 返回集合中指定索引的节点。索引值从0开始

  • NamedNodeMap
    org.w3c.dom.NamedNodeMap接口也是一个节点的集合。通过该接口可以建立节点名和节点之间的映射关系。表示一组节点名称和节点的一一对应关系。
    int getLength() 该方法返回列表中节点的数目
    Node item(int index) 返回集合中指定索引的节点。索引值从0开始
    Node getNamedItem(String name) 检索通过名称指定的节点
    Node setNamedItem(Node arg) 使用 nodeName 属性添加节点
    Node removeNamedItem(String name) 移除通过名称指定的节点

  • 使用JAXP通过DOM解析XML文档
    在这里插入图片描述

  • NamedNodeMap
    org.w3c.dom.NamedNodeMap接口也是一个节点的集合。通过该接口可以建立节点名和节点之间的映射关系。表示一组节点名称和节点的一一对应关系。
    int getLength() 该方法返回列表中节点的数目
    Node item(int index) 返回集合中指定索引的节点。索引值从0开始
    Node getNamedItem(String name) 检索通过名称指定的节点
    Node setNamedItem(Node arg) 使用 nodeName 属性添加节点
    Node removeNamedItem(String name) 移除通过名称指定的节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值