解析XML文档之一:使用SAX解析

时间:2022-09-04 17:31:46

使用sax解析xml方法总结

解析的的xml文档格式如下

<?xml version="1.0" encoding = "UTF-8"?>
<workers>
<worker id = "A001">
<name>Mark</name>
<sex>male</sex>
<status>project manager送的积分了送积分了送多了几分神盾舰发
牢骚的积分是了绝色赌妃洛杉矶神盾舰付款了的数据神盾舰发了啥飞
机上洛杉矶的发了设计费是束带结发洛杉矶数据的发了急死了飞机就算了
的飞机上多了几分送洛杉矶的飞机上飞机束带结发洛杉矶发神经分裂的设计
费司法局束带结发洛杉矶发神经的发了几
随碟附送的积分松岛枫了所涉及的雷锋精神了</status>
<address>beijing</address>
<money>8000</money>
</worker>
<worker id = "A002">
<name>lucy</name>
<sex>femalle</sex>
<status>progremmar</status>
<address>tianjin</address>
<money>4000</money>
</worker>
</workers>

第一步:下载即将解析的xml文档,得到一个InputStream的输入流。

public static InputStream downloader(String path) {
InputStream inputStream = null;
try {
URL url = new URL(path);
if (url != null) {
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
// connection.setConnectTimeout(3000);
// connection.setDoInput(true);
// connection.setRequestMethod("GET"); inputStream = connection.getInputStream(); }
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return inputStream;
}

第二步:获取SAXParserFactory对象

//得到输入流
inputStream = HttpDownloader
.downloader("http://192.168.1.110:8080/mp3/worker.xml");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
String line = "";
try {
          //使用循环方法将输入流转换成文本字符
while ((line = bufferedReader.readLine()) != null) {
xmlString.append(line);
}
//定义SAXParserFacotroy SAXParserFactory spf = SAXParserFactory.newInstance();
XMLReader reader = spf.newSAXParser().getXMLReader();
reader.setContentHandler(new SaxTools());
// 使用parse开始解析xml文件
reader.parse(new InputSource(new StringReader(xmlString
.toString())));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

第三步:实现解析过程

package com.example.saxtools;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; import android.widget.Toast; public class SaxTools extends DefaultHandler {
private String hisname, address, money, sex, status;
private String currentTagName;
private StringBuilder sb = null; public SaxTools() {
// TODO Auto-generated constructor stub
} @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub } @Override
// 参数列表uri命名空间
// localName 不带前缀
// qName 带前缀
// attribute 标签中的属性
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTagName = localName;
if (localName.equals("worker")) {
// 获取标签的全部属性
for (int i = 0; i < attributes.getLength(); i++) {
// 将属性值输出
System.out.println(attributes.getLocalName(i) + "="
+ attributes.getValue(i));
}
}
} @Override
// 备注:char[]数组的默认长度是2024,如果读取的文本超过了2024个字节,characters函数将会执行第二次调用,第二次调用的时候,
// char[]的长度依然是2024个字节,依次类推
public void characters(char[] ch, int start, int length)
throws SAXException {
// 实例化一个StringBuilder对象,用于存放characters获取到的数据
sb = new StringBuilder();
// 将获取到的数据添加到sb的末尾处
sb.append(ch, start, length); } @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
currentTagName = localName;// 当前解析的标签
if (currentTagName.equals("name")) {
hisname = sb.toString();
} else if (currentTagName.equals("sex")) {
sex = sb.toString();
} else if (currentTagName.equals("status")) {
status = sb.toString();
} else if (currentTagName.equals("address")) {
address = sb.toString();
} else if (currentTagName.equals("money")) {
money = sb.toString();
}
// 当完成一个对象的解析后,将这个对象的数据打印出来
if (currentTagName.equals("worker")) {
this.printout();
}
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub } // 打印数据
public void printout() {
System.out.println("name:" + hisname);
System.out.println("sex:" + sex);
System.out.println("address:" + address);
System.out.println("status:" + status);
System.out.println("money:" + money);
} }

第四部:测试效果

解析XML文档之一:使用SAX解析

解析XML文档之一:使用SAX解析的更多相关文章

  1. Java解析XML文档&lpar;简单实例&rpar;&mdash&semi;&mdash&semi;dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  2. Java高级特性 第14节 解析XML文档&lpar;2&rpar; - SAX 技术

    一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...

  3. 使用SAX解析xml文档

    1.首先,在main方法中解析xml文档,具体代码如下: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import ...

  4. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  5. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  6. 四种生成和解析XML文档的方法详解(介绍&plus;优缺点比较&plus;示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  7. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  8. &lbrack;置顶&rsqb; stax解析xml文档的6种方式

    原文链接:http://blog.csdn.net/u011593278/article/details/9745271 stax解析xml文档的方式: 基于光标的查询: 基于迭代模型的查找: 基于过 ...

  9. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  10. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...

随机推荐

  1. 云平台 为什么推荐使用小VM 而不是大VM独占宿主机的方式部署游戏服?

    近期公司X游戏项目,提了一个游戏VM资源的需求,是 64GB RAM + 30Core CPU 的VM规格,而一个VM部署10个游戏服.而我们云平台推荐的VM规格为 4 Core CPU + 4GB ...

  2. cadence 16&period;6 Pspice 仿真步骤

    从ADI官网下载后缀为 cir 的文件,AD8210 为例 进行仿真 1 打开 Cadence -> Release 16.6 -> PSpice Accessories -> Mo ...

  3. 换成gnome3桌面后国际版qq不能输入中文问题

    困扰了好久的问题今天终于解决了,网上也没有完整的教程,所以在这里整理下 前几天给自己的ubuntu装上了gnome桌面,一切都挺正常的,桌面很炫,用着也很舒服,不过之前的qq却没办法输入中文了,下面我 ...

  4. &lbrack;置顶&rsqb; CF 86D Powerful array 分块算法入门,n&ast;sqrt&lpar;n&rpar;

    简介:分块算法主要是把区间划分成sqrt(n)块,从而降低暴力的复杂度, 其实这算是一种优化的暴力吧,复杂度O(n*sqrt(n)) 题意:给定一个数列:a[i]    (1<= i <= ...

  5. c&plus;&plus;学习路线连接

    https://blog.csdn.net/qq_36482772/article/category/7396881/4?

  6. C语言基础课第二次作业

    一.  题目7-1 统计学生成绩 1.实验代码 #include<stdio.h> int main(void) { int i,grade,n; ,b=,c=,d=,e=; scanf( ...

  7. CUDA&lbrack;3&rsqb; Samples for accessing shared&sol;global memory

    memory model: programming model: Source:  Udacity Class CS344

  8. faces

    install Boost [boost_1_65_1-msvc-14.0-32.exe]BOOST_LIBRARYDIR=D:\_softwares_kits\boost_1_65_1\lib32- ...

  9. Nginx&plus;vsftpd搭建图片服务器

    安装Nginx 参考:http://www.cnblogs.com/idefav2010/p/nginx-concat.html Nginx配置文件 location ~ .*\.(gif|jpg|j ...

  10. Spring异常:Annotation-specified bean name&period;&period; for bean class &period;&period;&period;

    Spring重命名问题.对照项目中的注解,查找@Service是否重重名.由于Spring是在注解下按配置扫描的方式去创建对象的,那么两个重名的注解也就不成立了. 备注,特别注意test包下有没有通过 ...