XML——流机制解析器

【0】README

0.1) 本文文字描述转自 core java volume 2 , 旨在理解 XML——流机制解析器 的基础知识 ;
0.2) for detailed StAX, please visit http://blog.csdn.net/pacosonswjtu/article/details/50569728


【1】XML——流机制解析器概述

1)problem+solution

  • 1.1)problem: 如果文档很大,并且处理算法简单,可以在运行时解析节点, 而不必看到完整的树型结构, 那么DOM 解析器的执行效率就低下 了;
  • 1.2)solution: 在这种case 下, 我们应该使用流机制解析器;(干货——引入流机制解析器的原因)

2)java 提供的流机制解析器: SAX解析器和添加到Java 6 中的更现代化的 StAX 解析器。 SAX解析器使用的是事件回调, 而StAX解析器提供了解析事件的迭代器;(干货——java提供了SAX流机制解析器+StAX 解析器)


【2】使用SAX解析器 (干货——DOM解析器是基于SAX解析器的)

1)SAX解析器在解析XML 输入的组成部分时会报告事件, 但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构; (干货——SAX解析器在解析XML 输入的组成部分时会报告事件,即SAX解析器是基于事件的)
2)在使用SAX 解析器时,需要一个处理器来为不同的解析器事件定义事件动作,ContentHandler接口定义了若干个在解析文档时解析器会调用的回调方法。 下面是最重要的几个:

  • 2.1)startElement 和 endElement: 在每当遇到起始或终止标签时调用;
  • 2.2)characters :在每当遇到字符数据事件调用;
  • 2.3)startDocument 和 endDocument:分别在文档开始和结束时各调用一次;

3)看个荔枝:解析以下片段时,

<font><name>a</name><size units="pt">36</size>
</font>
  • 3.1)解析器会产生以下调用:

    • step1)startElement, 元素名: font
    • step2)startElement, 元素名: name
    • step3)characters, 内容: a
    • step4)endElement, 元素名: name
    • step5)startElement, 元素名:size,属性:units=“pt”
    • step6)characters, 内容: 36
    • step7)endElement, 元素名: size
    • step8)endElement, 元素名: font
  • 3.2)处理器必须覆盖以上方法, 让它们执行在解析文件时想要执行的动作;

Attention)

  • A1) HTML不是合法的XML, 大多数 HTML 页面都与良构的XML差别很大, 以至于示例程序无法解析它们;
  • A2)但是,W3C 编写的大部分页面都是用 XHTML编写的, XHTML 是一种 HTML方言,又是良构的XML; (干货——HTML不是合法的XML,而 XHTML 是一种 HTML方言,又是良构的XML)

4)代码分析:

  • 4.1)下面是如何得到SAX 解析器的代码: (干货——如何创建SAX解析器)
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
  • 4.2)现在可以处理文档了:
InputStream in = new URL(url).openStream();saxParser.parse(in, handler);
  • 4.3)这里的source 可以是一个文件, 一个URL 字符串或者是一个输入流。Handler 属于 DefaultHandler 的一个子类, DefaultHandler 类为以下四个接口定义了空的方法:
DefaultHandler handler = new DefaultHandler(){public void startElement(String namespaceURI, String lname, String qname,Attributes attrs){if (lname.equals("a") && attrs != null){for (int i = 0; i < attrs.getLength(); i++){String aname = attrs.getLocalName(i);if (aname.equals("href")) System.out.println(attrs.getValue(i));}}}};
  • 4.4)startElement 方法有3个描述元素名的参数: 其中 qname 参数以 prefix:localname的形式报告限定名; 如果命名空间处理特性已经打开, 那么 namespaceURI 和 lname 参数描述的就是 命名空间和 本地名(非限定)。
  • 4.5)与DOM解析器一样, 命名空间处理特性默认是关闭 的, 可以调用工厂类的 setNamespaceAware 方法来激活命名空间处理特性:
      SAXParserFactory factory = SAXParserFactory.newInstance();factory.setNamespaceAware(true);SAXParser saxParser = factory.newSAXParser();
  • 4.6)我们还处理了另外一个常见的问题: (干货——如果你不需要验证文件, 只需调用factory.setFeature方法)
    • XHTML 文件总是以一个包含对 DTD 引用的标签开头, 解析器将加载这个 DTD。 可以理解的是, W3C 肯定不乐意对诸如www.w3.org/TR/xhtml/DTD/xhtml-strict.dtd 这样的文件提供千万亿次的下载。总有一天,他们会完全拒绝提供这些文件, 至今,它们还在并不情愿地提供DTD下载。如果你不需要验证文件, 只需调用: factory.setFeature(“http://apache.org/xml/features/nonvalidating/load-external-dtd“, false);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第512章 河系量子计算机,第512章、河系量子计算机

69中文网 www.69zww.cc&#xff0c;最快更新分身投胎万界最新章节&#xff01;但AI智能所容身的量子计算机就大得有些恐怖了。其总体积丝毫不亚于一个小型河系&#xff01;什么是河系&#xff1f;银河系&#xff0c;仙女星系等等都是大小不等的河系&#xff01;而AI智能容身的量…

idea内置junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式

idea内置junit5Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Sel…

算法二之树形选择排序

一、树形选择排序的基本思想 &#xff08;1&#xff09; 树形选择排序又称锦标赛排序&#xff08;Tournament Sort&#xff09;&#xff0c;是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较&#xff0c;然后在n/2个较小者之间再进行两两比较&am…

计算机声卡型号价格,怎么查看电脑的声卡型号?查看声卡型号方法介绍

声卡是电脑上的硬件设施&#xff0c;任何电脑上的硬件都需要使用驱动使其运行&#xff0c;那么我们下载驱动的时候就会用到声卡型号&#xff0c;那么怎么查看电脑的声卡型号?下面小编就为大家详细介绍一下&#xff0c;一起来看看吧&#xff01;使用命令查看1、首先呢&#xff…

spring 配置只读事务_只读副本和Spring Data第1部分:配置数据库

spring 配置只读事务这是有关我们为利用只读副本来提高应用程序性能而寻求的一系列博客文章。 对于这个项目&#xff0c;我们的目标是建立我们的spring数据应用程序&#xff0c;并使用read仓库进行写操作&#xff0c;并基于read副本进行读操作。 为了模拟这种环境&#xff0c…

XML—— XSL 转换

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML—— XSL 转换 的基础知识 &#xff1b; 0.2&#xff09;XSL 转换&#xff1a; XSL 转换&#xff08;eXtensible StyleSheet Language扩展样式表语言&#xff09; (for detailed…

算法三之堆排序

一、堆(Heap)定义 &#xff08;1&#xff09;n个关键字序列Kl&#xff0c;K2&#xff0c;…&#xff0c;Kn称为&#xff08;Heap&#xff09;&#xff0c;当且仅当该序列满足如下性质&#xff08;简称为堆性质&#xff09;&#xff1a; k(i)<k(2i&#xff09;且k(i)<k(2i…

计算机宏如何设置方法,excel 如何启用宏的方法,以及如何设置excel启用宏

如何启用宏呢&#xff1f;在进行如何启用宏讲解之前&#xff0c;先来认识&#xff0c;Excel几个其余宏相关的知识点。如果Excel工作簿中包含宏&#xff0c;则将在打开工作簿之前对其进行扫描&#xff0c;以检查是否存在已知病毒。Excel宏设置有四个选项&#xff0c;如下图所示&…

怎么清理句柄_JAR文件句柄:混乱后清理!

怎么清理句柄在Ultra ESB中&#xff0c;我们使用特殊的热交换类加载器 &#xff0c;该加载器使我们可以按需重新加载Java类。 这使我们能够从字面上热交换我们的部署单元 -加载&#xff0c;卸载&#xff0c;使用更新的类重新加载&#xff0c;以及正常地逐步退出-无需重启JVM。 …

XML——生成 XML 文档(读入 XML的反向过程)

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML——生成 XML 文档&#xff08;读入 XML的反向过程&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core…

算法四之冒泡排序

一、冒泡排序&#xff08;Bubble Sort&#xff09;思想 &#xff08;1&#xff09;冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误…

java 使用sdk_使用SDKMAN管理多个Java SDK! 轻松

java 使用sdkSDKMAN&#xff01; 是用于管理多个软件开发套件的并行版本的便捷工具。 该工具对Java开发人员特别有用&#xff0c;因为它支持JVM的SDK&#xff0c;例如Java&#xff0c;Groovy&#xff0c;Scala&#xff0c;Kotlin和Ceylon。 还支持Gradle&#xff0c;Maven&…

ftp服务器在线查看文件内容,ftp服务器PDF文件在线查看的实现方法

URL形式&#xff1a;// http://localhost:2692/PDFVIEWER/web/viewer.html?filehttp://localhost:2692/TOV/DASystem/GetStreaem?path%3Dftp://ftp账号:ftp密码IP地址/0001/E_File3/2017526/test.PDF注意&#xff1a;PDFVIEWER/web/viewer.html是一个PDF插件地址链接后台方法…

XML——写出XML文档(XSLT+StAX)

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 XML——写出XML文档&#xff08;XSLTStAX&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume…

算法五之快速排序

一、快速排序&#xff08;Quicksort&#xff09;思想设要排序的数组是A[0]……A[N-1]&#xff0c;首先任意选取一个数据&#xff08;通常选用数组的第一个数&#xff09;作为关键数据&#xff0c;然后将所有比它小的数都放到它前面&#xff0c;所有比它大的数都放到它后面&…

jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?

jvm 助记符前言&#xff1a;此处描述的两个问题是在一年前发现并修复的。 本文仅用作历史证明&#xff0c;也是有关解决Java中文件描述符泄漏的初学者指南。 在Ultra ESB中&#xff0c;我们使用内存RAM磁盘文件缓存来进行快速且无垃圾的有效负载处理。 一段时间以前&#xff0…

08r2系统服务器开索引,SQLSERVER2008R2正确使用索引

T1表 10000000万条数据,(插入时间36分钟&#xff0c;count(*)查询19秒&#xff0c;空间占用670M左右)sql1.真正充分的利用索引好比like 张% 就是符合SARG(符合扫描参数)标准而like %张 就不符合该标准数据库通配符%在字符串首字符的使用会致使索引没法使用&#xff0c;虽然实际…

算法六之直接插入排序

一、直接插入排序基本思想 直接插入排序(straight insertion sort)的做法是&#xff1a;每次从无序表中取出第一个元素&#xff0c;把它插入到有序表的合适位置&#xff0c;使有序表仍然有序。第一趟比较前两个数&#xff0c;然后把第二个数按大小插入到有序表中&#xff1b; 第…

网络——连接到server

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 网络——连接到server 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/…

文件服务器监控用户修改信息,文件服务器监控日志软件

文件服务器监控日志软件 内容精选换一换有以下几种现象&#xff1a;将制作好的SD卡插入开发者板并上电后&#xff0c;开发者板LED1与LED2灯状态信息异常。将制作好的SD卡插入开发者板&#xff0c;并通过USB方式连接Ubuntu服务器&#xff0c;上电、开发者板启动完成后&#xff0…