saxparser_使用SaxParser和完整代码进行XML解析

saxparser

SAX解析器使用回调函数(org.xml.sax.helpers.DefaultHandler)通知客户端XML文档结构。 您应该扩展DefaultHandler并重写一些方法来实现xml解析。

覆盖的方法是

  • startDocument()和endDocument()–在XML文档的开头和结尾处调用的方法。
  • startElement()和endElement()–在文档元素的开头和结尾处调用的方法。
  • character()–以XML文档元素的开始和结束标记之间的文本内容调用的方法。

下面的示例演示使用DefaultHandler解析和XML文档。 它执行xml到模型类的映射并生成对象列表。

XML文档样本:

<?xml version="1.0" encoding="UTF-8"?>
<catalog><book id="001" lang="ENG"><isbn>23-34-42-3</isbn><regDate>1990-05-24</regDate><title>Operating Systems</title><publisher country="USA">Pearson</publisher><price>400</price><authors><author>Ganesh Tiwari</author></authors></book><book id="002"><isbn>24-300-042-3</isbn><regDate>1995-05-12</regDate><title>Distributed Systems</title><publisher country="Nepal">Ekata</publisher><price>500</price><authors><author>Mahesh Poudel</author><author>Bikram Adhikari</author><author>Ramesh Poudel</author></authors></book>
</catalog>

Book对象的模型类,用于将xml映射到对象

/*** Book class stores book information, after parsing the xml* @author Ganesh Tiwari*/
public class Book {String lang;String title;String id;String isbn;Date regDate;String publisher;int price;List<String> authors;public Book(){authors=new ArrayList<String>();}//getters and setters
}

XML解析(Sax)的Java代码:

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MySaxParser extends DefaultHandler {List<Book> bookL;String bookXmlFileName;String tmpValue;Book bookTmp;SimpleDateFormat sdf= new SimpleDateFormat("yy-MM-dd");public MySaxParser(String bookXmlFileName) {this.bookXmlFileName = bookXmlFileName;bookL = new ArrayList<Book>();parseDocument();printDatas();}private void parseDocument() {// parseSAXParserFactory factory = SAXParserFactory.newInstance();try {SAXParser parser = factory.newSAXParser();parser.parse(bookXmlFileName, this);} catch (ParserConfigurationException e) {System.out.println("ParserConfig error");} catch (SAXException e) {System.out.println("SAXException : xml not well formed");} catch (IOException e) {System.out.println("IO error");}}private void printDatas() {// System.out.println(bookL.size());for (Book tmpB : bookL) {System.out.println(tmpB.toString());}}@Overridepublic void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException {// if current element is book , create new book// clear tmpValue on start of elementif (elementName.equalsIgnoreCase("book")) {bookTmp = new Book();bookTmp.setId(attributes.getValue("id"));bookTmp.setLang(attributes.getValue("lang"));}// if current element is publisherif (elementName.equalsIgnoreCase("publisher")) {bookTmp.setPublisher(attributes.getValue("country"));}}@Overridepublic void endElement(String s, String s1, String element) throws SAXException {// if end of book element add to listif (element.equals("book")) {bookL.add(bookTmp);}if (element.equalsIgnoreCase("isbn")) {bookTmp.setIsbn(tmpValue);}if (element.equalsIgnoreCase("title")) {bookTmp.setTitle(tmpValue);}if(element.equalsIgnoreCase("author")){bookTmp.getAuthors().add(tmpValue);}if(element.equalsIgnoreCase("price")){bookTmp.setPrice(Integer.parseInt(tmpValue));}if(element.equalsIgnoreCase("regDate")){try {bookTmp.setRegDate(sdf.parse(tmpValue));} catch (ParseException e) {System.out.println("date parsing error");}}}@Overridepublic void characters(char[] ac, int i, int j) throws SAXException {tmpValue = new String(ac, i, j);}public static void main(String[] args) {new MySaxParser("catalog.xml");}
}

解析输出:

Book [lang=ENG, title=Operating Systems, id=001, isbn=23-34-42-3, regDate=Thu May 24 00:00:00 NPT 1990, publisher=USA, price=400, authors=[Ganesh Tiwari]]
Book [lang=null, title=Distributed Systems, id=002, isbn=24-300-042-3, regDate=Fri May 12 00:00:00 NPT 1995, publisher=Nepal, price=500, authors=[Mahesh Poudel, Bikram Adhikari, Ramesh Poudel]]

参考:在GT's Blog上, 使用我们的JCG合作伙伴 Ganesh Tiwari 提供的完整代码 , 使用SaxParser进行XML解析 。


翻译自: https://www.javacodegeeks.com/2012/01/xml-parsing-using-saxparser-with.html

saxparser

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

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

相关文章

第一个Python程序

在E:\Python 下新建一个hello.py文件&#xff0c;里面的内容是print(hello world) 进入命令提示窗格&#xff0c;输入E: 点击回车 输入 cd python 点击回车 输入Python hello.py 结果如图 转载于:https://www.cnblogs.com/lgqboke/p/5882049.html

matlab导入txt生成曲面,求助:怎样将txt的数据导入到Matlab中并根据参数画出波形...

导师让我把波形画出来&#xff0c;这下完全不会啊&#xff01;希望各位高手帮帮在下……txt中部分数据如下&#xff1a;ID DDD HH:MM:SS.mmmuuun PARA1 PARA2 CH RISE COUN ENER DURATION AMP A-FRQ RMS ASL PCNTS THR R-FRQ I-FRQ SIG STRNGTH ABS-ENERGY1…

Java多线程:易失性变量,事前关联和内存一致性

什么是volatile变量&#xff1f; volatile是Java中的关键字。 您不能将其用作变量或方法名称。 期。 我们什么时候应该使用它&#xff1f; 哈哈&#xff0c;对不起&#xff0c;没办法。 当我们在多线程环境中与多个线程共享变量时&#xff0c;我们通常使用volatile关键字&…

20145219 《信息安全系统设计基础》第01周学习总结

20145219 《信息安全系统设计基础》第01周学习总结 教材学习内容总结 别出心裁的Linux命令学习法 1、Ubuntu快捷键 CTRLALTT:打开终端&#xff1b;CTRLSHIFTT&#xff1a;新建标签页&#xff1b;ALT数字N&#xff1a;终端中切换到第N个标签页&#xff1b;Tab:终端中命令补全&…

拉盖尔多项式 matlab,类氢原子的定态波函数

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp预备知识 球坐标系中的定态薛定谔方程&#xff0c;原子单位制本文使用原子单位制&#xff0e;类氢原子(hydrogen-like atom)被定义为原子核有 $Z$ 个质子(核电荷为 $Ze$)有一个核外电子的原子/离子&#xff0…

再论EM算法的收敛性和K-Means的收敛性

标签&#xff08;空格分隔&#xff09;&#xff1a; 机器学习 &#xff08;最近被一波波的笔试面试淹没了&#xff0c;但是在有两次面试时被问到了同一个问题&#xff1a;K-Means算法的收敛性。在网上查阅了很多资料&#xff0c;并没有看到很清晰的解释&#xff0c;所以希望可以…

java xml dom getelementbyid,DOM中常见的元素获取方式

1.getElementById获取元素 返回的是一个元素对象var timer document.getElementById(time);console.dir 打印返回元素对象&#xff0c;更好的查看里面的属性和方法console.dir( timer );2.getElementsByTagName 获取某类标签元素 返回的是 获取过来元素对象的集合 以…

杰尔·地狱

什么是JAR地狱&#xff1f; &#xff08;或者是classpath地狱&#xff1f;还是依赖地狱&#xff1f;&#xff09;在考虑使用Maven或OSGi等现代开发工具时&#xff0c;哪些方面仍然有意义&#xff1f; 有趣的是&#xff0c;似乎没有对这些问题的结构化答案&#xff08;即&#…

matlab radsimp,[转载]MATLAB学习笔记(八)

符号运算符号运算分为以下几类&#xff1a;符号表达式和符号矩阵的操作整体定义为符号微积分符号线性方程符号微分方程A、符号变量、符号表达式和符号方程的分解一、 生成符号变量要使用sym和syms&#xff1a;使用sym函数可以定义符号表达式&#xff0c;此时有两种定义方法&…

windows,python3.x下安装pyspider

由于是初学者&#xff0c;业余学习&#xff0c;习惯使用windows&#xff0c;初次了解到pyspider写代码和调试代码非常简便&#xff1b;作者binux是在Ubuntu下部署测试的。在作者的博客看到windows下安装的讨论。windows直接安装失败主要是lxml、pycurl安装失败&#xff0c;需要…

matlab实验符号计算答案,实验五matlab符号计算

实验五matlab符号计算 实验 5 符号计算 教师评分班级 学号 姓名实验日期 2014 年 6 月 17 日 星期 二 第 1 至 2 节课实验地点实验目的1. 掌握定义符号对象的办法2. 掌握符号表达式的运算法则以及符号矩阵运算3. 掌握求符号函数极限及导数的方法4. 掌握求符号函数定积分和不定积…

junit4 单元测试框架_超越JUnit –测试框架的替代方案

junit4 单元测试框架JUnit是事实上的Java单元测试框架&#xff0c;但是可能有一些新的&#xff08;不是那么新的&#xff09;框架可以用于Web开发。 在采用之前可能要问自己的问题&#xff1a; 它们是否快速&#xff0c;容易开发并因此成本低廉&#xff1f; 他们运行快并因此鼓…

Java学习笔记之:Java String类

一、引言 字符串广泛应用在Java编程中&#xff0c;在Java中字符串属于对象&#xff0c;Java提供了String类来创建和操作字符串。 创建字符串最简单的方式如下: String str "Hello world!"; String类型是特殊的引用类型&#xff0c;我们也可以通过实例化的方式来创建 …

java循环输入直到,使用循环接受其他用户输入,直到用户输入结束输入的值

我是Java的新手 . 我需要一些帮助&#xff0c;使用循环接受其他用户输入&#xff0c;直到用户输入结束输入的值 . 我的问题从语句“System.out.println(”你完成了吗&#xff1f;输入大写的Y / N)开始 . 下面是我的代码 .公共类EmployeeData {//declare variablesprivate Strin…

WildFly 10 CR 2发布– Java EE 7,Java 8,Hibernate 5,JavaScript支持热重载

昨天&#xff0c;WildFly团队发布了最新版本的WildFly 10 。 CR2很可能是预计于十月份发布最终版本之前的最后一个版本。 即使主要支持的Java EE规范是7&#xff0c;WildFly 8和WildFly 9仍具有许多新功能&#xff0c;该版本现在具有三个服务器版本&#xff0c;实现了Java EE 7…

php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...

java中的this与super的区别java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...php传值和传引用的区别php传值和传引用的区别所谓值传递,就是说仅将对象的值传递给目标对象,就相当于…

openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)

openshift 部署在过去的几年中&#xff0c;我越来越多地听说过“云”服务。 最初&#xff0c;我并不是很想尝试一下。 但是几个月后&#xff08;一年&#xff1f;&#xff09;&#xff0c;我决定看看这是怎么回事。 我从事Java EE开发已有7年以上&#xff0c;因此&#xff0c;我…

迪克逊准则matlab,浙江科技学院学报

引言传统的农业栽培需要遵循季节性及周期性的栽培规律,受外界环境的影响较大,相应的栽培技术无法得到良好的栽培结果[1]。而温室大棚通过环境控制器调节温室环境,为作物提供了合适的生长环境。因此,它在农业领域的应用越来越广泛,温室环境控制系统的研究成为人们关注的热点[2-5…

Linq表达式和Lambda表达式用法对比

什么是Linq表达式&#xff1f;什么是Lambda表达式&#xff1f;前一段时间用到这个只是&#xff0c;在网上也没找到比较简单明了的方法&#xff0c;今天就整理了一下相关知识&#xff0c;有空了再仔细研究研究 public Program() { List<Student> allStudent new List<…

使用FlexDeploy对融合中间件应用程序进行自动化软件测试

自动化软件测试是任何软件组织都应执行的强制性活动之一&#xff0c;以保证其产品质量。 但是&#xff0c;此过程通常变得非常复杂&#xff0c;尤其是涉及由多个不同部分组成的现代复杂系统的自动化测试时。 所有这些部分都基于不同的技术&#xff0c;显然&#xff0c;应该使用…