stax java_java StAX很多java人员不知道的小工具
您觉得自己懂 Java 编程?事实是,大多数开发人员都只领会到了 Java 平台的皮毛,所学也只够应付工作。有些Java工具无法分类,只能算作 “有用的东西”。这是developerworks5件事系列中介绍一些您乐于拥有的工具,即使您将它们放到厨房抽屉里。
编者按:本文为 Neward & Associates 的主管Ted Neward 撰写的5件你不知道的事情系列的最后一篇(至少目前是这样)。Ted Neward 在Neward & Associates负责有关 Java、.NET、XML 服务和其他平台的咨询、指导、培训和推介。他现在居住在华盛顿州西雅图附近。以下为本文的译文:
1. StAX
在千禧年左右,当 XML 第一次出现在很多 Java 开发人员面前时,有两种基本的解析 XML 文件的方法。SAX 解析器实际是由程序员对事件调用一系列回调方法的大型状态机。DOM 解析器将整个 XML 文档加入内存,并切割成离散的对象,它们连接在一起形成一个树。该树描述了文档的整个 XML Infoset 表示法。这两个解析器都有缺点:SAX 太低级,无法使用,DOM 代价太大,尤其对于大的 XML 文件 — 整个树成了一个庞然大物。幸运的是,Java 开发人员找到第三种方法来解析 XML 文件,通过对文档建模成 “节点”,它们可以从文档流中一次取出一个,检查,然后处理或丢弃。这些 “节点” 的 “流” 提供了 SAX 和 DOM 的中间地带,名为 “Streaming API for XML”,或者叫做StAX。(此缩写用于区分新的 API 与原来的 SAX 解析器,它与此同名。)StAX 解析器后来包装到了 JDK 中,在 javax.xml.stream 包。
使用 StAX 相当简单:实例化 XMLEventReader,将它指向一个格式良好的 XML 文件,然后一次 “拉出” 一个节点(通常用 while 循环),查看。例如,在清单 1 中,列举出了 Ant 构造脚本中的所有目标:
清单 1. 只是让 StAX 指向目标
import java.io.*;
import javax.xml.namespace.QName;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.stream.util.*;
public class Targets {
public static void main(String[] args) throws Exception
{
for (String arg : args) {
XMLEventReader xsr =XMLInputFactory.newInstance().createXMLEventReader(new FileReader(arg));
while (xsr.hasNext())
{
XMLEvent evt = xsr.nextEvent();
switch (evt.getEventType())
{
case XMLEvent.START_ELEMENT:
{
StartElement se = evt.asStartElement();
if (se.getName().getLocalPart().equals("target"))
{
Attribute targetName = se.getAttributeByName(new QName("name")); // Found a target!
System.out.println(targetName.getValue());
}
break;
} // Ignore everything else
}
}
}
}
}
StAX 解析器不会替换所有的 SAX 和 DOM 代码。但肯定会让某些任务容易些。尤其对完成不需要知道 XML 文档整个树结构的任务相当方便。
请注意,如果事件对象级别太高,无法使用,StAX 也有一个低级 API 在 XMLStreamReader 中。尽管也许没有阅读器有用,StAX 还有一个 XMLEventWriter,同样,还有一个 XMLStreamWriter 类用于 XML 输出。
stax java_java StAX很多java人员不知道的小工具相关推荐
- IDEA你可能不知道的小工具
IDEA自带的小功能 REST Client Test 作为后端开发应该都知道postman,作为接口测试工具,但是要单独打开一个软件或者网页.这边idea就自带了restful接口测试工具: Too ...
- php h5支付没有返回app中,很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法...
在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...
- 英雄联盟怎么解除小窗口_英雄联盟:老玩家都不知道的小技巧,一定要注意这些细节|英雄联盟|召唤师|防御塔|新英雄|亚索...
英雄联盟:老玩家都不知道的小技巧,一定要注意这些细节 英雄联盟作为当下最火爆的游戏之一,已经陪伴大家走过了无数的春夏秋冬,如今英雄联盟已经迎来了越来越多的新英雄,随着英雄联盟里面的英雄不断的增多,越来 ...
- C语言你不得不知道的小知识
C语言你不得不知道的小知识: 1: 常见的变量修饰关键字:static.const.extern.volatile.register static:(该变量保存在全局静态区) a.修饰局部变量--& ...
- java web 项目 常用 小工具类 ~~~~
java web 项目 常用 小工具类 ~~~~ 一 .DateUtil 日期工具类 package com.devframe.common.util;import java.text.Simple ...
- java写测试小工具,java试题自我测试小工具
java试题自我测试小工具 北京石油化工学院 数理系 科 072 071616 刘红育 1 Java 语言综合设计实验报告 --GUI 编程设计题目: Java 试题自我测试小工具 班级: 学号: 姓 ...
- 有哪些老鸟程序员知道而新手不知道的小技巧?自我感受
最近在朋友圈看到别人分享的一篇知乎回答:https://www.zhihu.com/question/36426051/answer/76031743 我觉得写得挺有道理的,作为一个写了10多年C#代 ...
- 那些你可能不知道的 PDF 工具
从网上下载了PDF文件,想转换为文字或者图片怎么办,这里分享些常用的PDF制作工具. smallpdf 功能一应俱全.简单好用的线上 PDF 工具 https://smallpdf.com/cn/ p ...
- 一些你我所不知道的小知识
一.老师没教的事 a.人类全身上下,最强韧有力的肌肉,竟是舌头. b.张开眼睛打喷嚏是不可能的. c.憋气自杀也是不可能成功的. d.每一次你舔一张邮票的背胶,你就吸收了十分之一卡路里. e.右撇子平 ...
最新文章
- 单目图像深度估计 - 泛化篇:S2R-DepthNet
- 2021湖北孝感高考成绩查询时间,2021年4月孝感自考成绩查询时间网址入口
- nrf51822蓝牙芯片ble_app_proximity程序总结
- fast.ai 深度学习笔记:第一部分第一课
- c语言提取七位数讲解,C语言-体育彩票7位数,感受身中500万的fell
- 安工大计算机学院肖维民,安工大路由器实验报告.docx
- c#2.0语法新关键字 partial
- uva10668二分解方程
- PHP 公众号文章 转 pdf,使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...
- windows10同步时间出错,终于找到解决办法了!
- 配置PLSQL连接ORACLE数据库
- TCP网络错误Connection reset by peer,peer是啥意思呢
- 取redis中手机验证码,并验证是否正确
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 数据类型之列表与元组
- Apache官网下载ant软件包及安装详解
- XYQ加密算法——动态可逆加密算法。
- axios 获取本地json文件
- 【Linux】解压缩文件(一)
- Python3中关于下划线变量和命名的总结