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

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

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

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

相关文章

mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数

一、常见字符串函数&#xff1a;1、CHAR_LENGTH 获取长度(字符为单位)2、FORMAT 格式化3、INSERT 替换的方式插入4、INSTR 获取位置5、LEFT/RIGHT 取左、取右6、LENGTH 获取长度(字节为单位)7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义)8、STRCMP 字符串比较9、CONCAT 字…

Android异常和工具使用笔记

Android异常和工具使用笔记 1、r文件找不到去你的工程目录下&#xff0c;手动的把gen删掉&#xff0c;然后去project中刷新一下&#xff0c;在编译看看。以前遇到过类似的问题&#xff0c;实在不行就把你的eclispe,adt升级到最新的版本吧 抓住那么一点点线索&#xff0c;就要去…

ADO.NET 核心对象简介

ADO.NET ADO.NET是.NET中一组用于和数据源进行交互的面向对象类库&#xff0c;提供了数据访问的高层接口。 ADO.NET类库在System.Data命名空间内&#xff0c;根据我们访问的不同数据库选择命名空间&#xff0c;System.Data.SqlClient。 ADO.NET类最重要的优点是支持数据库以断开…

MongoDB与Spring Data项目

如今&#xff0c;我们所有人都在观察NoSql解决方案的爆炸式增长。 我已经习惯了RDBMS&#xff0c;但这些并不是您可能遇到的所有挑战的解决方案。 根据最近的经验&#xff0c;我有机会使用MongoDB –文档数据库。 在本文中&#xff0c;我打算介绍将MongoDB与Spring Data项目一起…

java转换为字符串_java – 如何从int转换为字符串?

正常方式是Integer.toString(i)或String.valueOf(i)。串联将工作&#xff0c;但它是非常规的&#xff0c;可能是一个难闻的气味&#xff0c;因为它暗示作者不知道上述两种方法(他们不知道什么&#xff1f;)。Java在使用字符串(见the documentation)时对操作符提供了特殊的支持&…

简学LINGO(三)——实例篇

1. 装配线平衡模型 一个装配线含有一系列的工作站。在终于产品的加工过程中每一个工作站运行一种或者是几种特定的任务。装配线周期是指全部工作站完毕分配给他们各自任务所花费时间的最大值。平衡装配线的目标是为每一个工作站分配加工任务。尽可能使每一个工作站运行同样数量…

Hibernate缓存级别教程

开始使用Hibernate的人们常见的问题之一就是性能&#xff0c;如果您没有太多的Hibernate经验&#xff0c;您会发现应用程序变慢的速度。 如果启用sql跟踪&#xff0c;您将看到有多少查询被发送到数据库&#xff0c;而这些查询几乎不需要Hibernate知识就可以避免。 在当前文章中…

java方法执行的时间_计算Java中任意一个方法的执行时间的工具类

1 packagealgorithm.study.utils;23 importjava.lang.reflect.Method;45 /**6 * This class is getting a method execute time and provide some other functions.7 *8 *authorygh 2017年2月24日9 */10 public classMethodExecuteTimeUtils {1112 /**13 * Get a method execut…

如何在 IIS 中设置 HTTPS 服务

Windows Server2008、IIS7启用CA认证及证书制作完整过程 这篇文章介绍了如何安装证书申请工具&#xff1b; 如何在iis创建证书申请&#xff1b; 如何使用iis申请证书生成的txt文件&#xff0c;在工具中开始申请证书&#xff1b; 如何导出证书&#xff1b; 以及在网站中开始使用…

Android之卫星菜单的实现

卫星菜单是现在一个非常受欢迎的“控件”&#xff0c;很多Android程序员都趋之若鹜&#xff0c;预览如下图。传统的卫星菜单是用Animation实现的&#xff0c;需要大量的代码&#xff0c;而且算法极多&#xff0c;一不小心就要通宵Debug。本帖贴出用属性动画Animator来实现卫星菜…

Java中的WADL:温和的介绍

WADL&#xff08; Web应用程序描述语言 &#xff09;对REST而言&#xff0c;WSDL对SOAP而言。 这种语言的仅仅存在引起了很多争议&#xff08;请参阅&#xff1a; 我们需要WADL吗&#xff1f; 或者 需要 WADL还是不需要WADL &#xff09;。 我可以想到使用WADL的一些合法用例&a…

类成员函数模板特化

//类成员函数模板特化 #include <stdio.h> class A{ public:template <class T>void Print(){printf("A template\n");} };template<> void A::Print<int>(){printf("int\n"); }int main(){A a;a.Print<double>();a.Print&l…

为云量身定制您的服务

相信大家都听说过Amazon的AWS。作为业内最为成熟的云服务提供商&#xff0c;其运行规模&#xff0c;稳定性&#xff0c;安全性都已经经过了市场的考验。时至今日&#xff0c;越来越多的应用被部署在了AWS之上。这其中不乏Zynga及Netflix这样著名的服务。 然而这一切并没有停滞不…

在Vaadin和JSF之间选择

随着最新版本的Primefaces 3.0的发布&#xff0c;JSF终于达到了前所未有的成熟度和实用性&#xff0c;使其与其他流行的Rich Internet Applications&#xff08;RIA&#xff09;选项如Google Web Toolkit&#xff08;GWT&#xff09;&#xff0c;ExtJS&#xff0c;Vaadin&#…

20145202马超《信息安全系统设计基础》实验二总结

[实验二]&#xff08;http://www.cnblogs.com/nizaikanwoma/p/6131778.html&#xff09; 转载于:https://www.cnblogs.com/tuolemi/p/6131987.html

java 连接ldap_ldap java 连接demo

public class LDAPHelper {/*** LDAP可以理解为一个多级目录&#xff0c;这里&#xff0c;表示要连接到那个具体的目录*/private final String baseDn "ouPeople,dcchangyeyi,dccom";private LdapContext ctx null;private final Control[] connCtls null;private…

flask开发restful api系列(1)

在此之前&#xff0c;向大家说明的是&#xff0c;我们整个框架用的是flask sqlalchemy redis。如果没有开发过web&#xff0c;还是先去学习一下&#xff0c;这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉&#xff0c;我建议先到这个网站简单学习一下&am…

Apache Commons Lang StringUtils

因此&#xff0c;认为最好谈论我喜欢的另一个Java库。 它已经存在了一段时间&#xff0c;也许不是最令人兴奋的库&#xff0c;但是它非常有用。 我可能每天都使用它。 org.apache.commons.lang.StringUtils StringUtils是Apache Commons Lang&#xff08; http://commons.apac…

JEE7:展望新时代

计划于2012年下半年发布的Java EE 7预计的JSR都已启动并正在运行。 Java EE 7发行版是日期驱动的&#xff0c;它将反映该行业迁移到云中时不断变化的需求&#xff1a;任何未准备就绪的内容将推迟到Java EE 8中使用 。 这是Java EE 7平台中不同规范的关键功能的更新和摘要。 1。…

Cocos2d-JS项目之UI界面的优化

测试环境&#xff1a; iphone4、iOS6.1.2、chrome 37.2062.60&#xff0c;Cocos2d-js 3.6 之前写了不少&#xff0c;实际项目也按这个去优化了&#xff0c;也有效果&#xff0c;但到最后才发现&#xff0c;尼玛&#xff0c;之前都搞错了&#xff0c;之所以有效果是歪打正着。。…