1. DOM解析和SAX解析相关知识点

 2024-03-06 00:07:26  阅读 0

让我们一起养成写作习惯吧! 这是我参加“掘金每日新计划·四月更新挑战”的第26天。 点击查看活动详情。

前言:程序中访问和操作XML文件一般有两种模型:DOM(文档对象模型)和流模型; 在本文中,它们分别对应于DOM解析和SAX解析。

1. DOM解析和SAX解析相关知识点 1.1 DOM1.2 DOM解析 1.3 SAX解析 1.4 DOM解析和SAX解析对比

基于树,持久存在内存中并且其内容可以修改

基于事件,类似于流式传输,分析可以立即开始,而不是等待所有数据处理完毕

在内存中构建文件树不适合处理大型 XML 文件。

按顺序读取文件并生成相应的事件,并且可以处理任意大小的XML文件。

可以随意访问文件树的任意部分,没有次数限制

只能按顺序分析文件,不支持随机访问文件。

可以随意修改文件树​​,从而修改XML文件

XML 文件内容只能读取,不能修改。

易于理解,易于开发

开发比较复杂,需要自己制作事件处理程序。

基于DOM建立了文件树

对于员工来说更加灵活,您可以使用 SAX 构建自己的 XML 对象模型

SAX 和 DOM 并不相互排斥。 我们可以使用 DOM 创建 SAX 事件流,也可以使用 SAX 创建 DOM 树。

1.5 XML 和 HTML 的区别

XML(可扩展标记语言)是一种用于定义其他语言的元语言。 它的前身是SGML(标准通用标记语言)。

HTML(-)是超文本标记语言,是WWW的描述语言。

XML旨在描述数据,重点是数据的内容

HTML 旨在显示数据,重点是数据的外观。

xml将数据和显示分开。

Html结合数据和显示,将数据显示在页面上

xml用于描述和存储数据,因此可以作为持久化介质

html用于显示数据

XML 标签是免费的、可定制的且可扩展的

Html 标签是预定义的

xml 中严格区分大小写

html 中不区分大小写

在XML中,它是严格的树形结构,结束标签不能省略。

在 HTML 中,有时松散地,如果上下文清楚地显示段落或列表键的结束位置,则可以省略

或类似的结束标签。

在XML中,属性值必须用引号引起来

在 HTML 中,引号是可选的。

在 XML 中,所有属性都必须有相应的值。

在 HTML 中,可以使用不带值的属性名称。

在 XML 文档中,解析器不会自动删除空格。

HTML 可以过滤掉空格。

xml没有固有的标签

html 使用固有标签,例如

或者等待

2.Java中DOM解析实战(Dom4j解析)

之前写过一篇关于Dom4j解析的博客。 详细内容请参见我的另一篇博客 //...

ps:注意不要导入错误的包。 它是org.dom4j下的一个包。

另外,在XML文件解析中,采用DOM+XPath的方式来加载并解析配置文件。 XPath是XML路径语言(XML Path),它是一种用来确定XML文档某些部分位置的语言。 它是一种设计用于查询 XML 文档的语言。 由于DOM解析XML的方式将整个XML内容加载到内存中并形成树形结构,因此XPath可以配合DOM来解析XML。

以上图片来自百度百科。 对XPath感兴趣的同学可以参考百度百科。 上面的描述已经很清楚了。 链接:/item/XPath/...

3.DOM模式解析XML时属性的作用

规定:

W3C 定义了 XML 解析器如何正确读取 XML 文件编码的三个规则:

如果文本文件的头部有BOM(Byte Order Mark),即字节顺序标记(在编码标准中用于标识文件是采用哪种格式编码的),则遵循BOM。 如果没有 BOM,请检查 XML 声明的编码属性。 如果以上都不存在,则假定 XML 文档是 UTF-8 编码的。

也就是说,XML解析器首先根据文件的BOM来解析文件; 如果未找到 BOM,则使用 XML 中属性指定的编码; 如果XML中没有指定,则默认使用utf-8解析文档。 然后就可以推导了。 如果同时有BOM和BOM,则以BOM指定的为准。

有关详细信息,请参阅我的另一篇博文://...

3.SAX解析

注意不要导入错误的包

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
public class SAXParseDemo {
    public static void main(String[] args) {
        //1.创建解析工厂
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        //2.创建解析器
        try {
            SAXParser saxParser = saxParserFactory.newSAXParser();
            //3.通过解析器的parse方法
            saxParser.parse("C:\\Users\\yclw060\\Desktop\\11.xml",new MyDefaultHandler());
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
class MyDefaultHandler extends DefaultHandler{
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        //找到开始标签,输出标签名
        System.out.println(qName);
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        //标签内的文体生成String,然后输出
        System.out.println(new String(ch,start,length));
    }
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        //输出结束标签名
        System.out.println(qName);
    }
}

4.JAXP简介

JAXP(用于 XML 处理的 Java API)是 Java XML 编程的应用程序编程接口之一。 它提供了解析和验证 XML 文档的能力。 JAXP解析XML的三个基本接口是:

文档对象模型解析接口或 DOM 接口 XML 简单 API 解析接口或 SAX 接口 XML 流 API 或 StAX 接口(它是 JDK 6 的一部分,为 JDK 5 提供单独的包) 除了解析接口之外,JAXP 还提供了 XSLT XML 文档执行数据和结构转换的接口。

前面三章已经具体分析了前两种解析方法。 下面简单解释一下剩下的两种方法:

4.1 StAX 接口 StAX 的设​​计介于DOM 和SAX 接口之间。 在它的比喻中,程序的入口点是代表文档中的位置的光标。 应用程序可以根据需要向前移动光标——从解析器中“拉出”信息。 这与基于事件的 API(例如 SAX)不同,后者将数据“推送”到应用程序,并且如果应用程序需要知道文档中的位置信息,则要求应用程序维护事件之间的状态。 4.2 XSLT接口

介绍:

该界面的主要功能包括:

标签: 解析 文档 标记

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码