<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>书名1</书名>
<作者>作者1</作者>
<售价>售价1</售价>
</书>
<书>
<书名>书名2</书名>
<作者>作者2</作者>
<售价>售价2</售价>
</书>
</书架>

创建Book类来封装解析出来的xml

package day04;

public class Book {
private String name;
private String author;
private String price;
public String getName() {
return name;
}
public Book() {
}
public Book(String name, String author, String price) {
this.name = name;
this.author = author;
this.price = price;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
} }

sax--解析过程

package day04;

import java.io.IOException;
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.XMLReader;
import org.xml.sax.helpers.DefaultHandler; public class Demo3 { //sax解析xml文档
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException{
Demo3 d=new Demo3();
//1.创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance(); //2.得到解析器
SAXParser sp=factory.newSAXParser(); //3.得到读取器
XMLReader reader=sp.getXMLReader(); //4.设置内容处理器
BeanListHander Hander=d.new BeanListHander();
reader.setContentHandler(Hander); //5.读取xml文档内容
reader.parse("src/Book.xml"); List<Book> list=Hander.getBooks();
System.out.println(list ); }
//把xml文档中每一本书封装到一个book对象,并把多个对象放到一个list集合中返回
class BeanListHander extends DefaultHandler{
private List<Book> list=new ArrayList<Book>();//存入list集合中
private String currentTag;//记住当前解析到的是什么标签
private Book book;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
currentTag=qName;
if("书".equals(currentTag)){
book=new Book();
} } @Override
public void characters(char[] ch, int start, int length) throws SAXException {
if("书名".equals(currentTag)){
String name = new String(ch,start,length);
book.setName(name);
}
if("作者".equals(currentTag)){
String author= new String(ch,start,length);
book.setAuthor(author);
}
if("售价".equals(currentTag)){
String price = new String(ch,start,length);
book.setPrice(price);
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equals("书")){
list.add(book);
book=null;
}
currentTag=null;
} public List<Book> getBooks() {
return list;
} } }

节点打到这一句:

List<Book> list=Hander.getBooks();

xml---sax操作的更多相关文章

  1. IntelliJ IDEA中项目报错org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 8 或maven操作compile报resource使用utf8这样的编码错

    问题:项目开发工具已经setting成utf-8 并且项目各方面的配置文件包括maven这些的pom.xml里的配置都已经设置为utf-8 但是还报错 IntelliJ IDEA中项目报错org.xm ...

  2. xml操作-Nested exception: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId. 异常处理

    异常如下: org.dom4j.DocumentException: Error on line 2 of document file:///D:/workspaces/struts2/lesson0 ...

  3. Java对Xml进行操作的实例(转)

    这是一个用JAVA W3C DOM 进行XML操作的例子,包含了查询.增加.修改.删除.保存的基本操作.较完整的描述了一个XML的整个操作流程.适合刚入门JAVA XML操作的朋友参考和学习. 假设有 ...

  4. 【Java】解析Java对XML的操作

    目录结构: contents structure [+] 什么是XML 解析XML 使用DOM解析 使用SAX解析 使用PULL解析 使用dom4j解析xml dom4j的部分API 打印一个XML文 ...

  5. org.xml.sax.SAXParseException: Content is not allowed in prolog

    sax错误:org.xml.sax.SAXParseException: Content is not allowed in prolog解决  标签: org. xml. sax. saxparse ...

  6. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式

    [1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...

  7. SpringMVC org.xml.sax.SAXParseException: cvc-complex-type.2.4.c 报错处理方式

    使用SpringMVC的过程中需要访问静态文件,即在spring-servlet.xml文件中添加了 <mvc:default-servlet-handler /> 标签,以开启Sprin ...

  8. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  9. xml ---DOM操作

    package day03.xml; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; ...

  10. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

    二月 25, 2016 9:24:24 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRul ...

随机推荐

  1. AXIS最佳实践

    前言: Axis是apache一个开源的webservice服务,需要web容器进行发布.本节主要用于介绍使用Axis开发webservice,包括服务端的创建.webservice的部署.客户端的调 ...

  2. logstash无法使用conf启动

    最近刚开始学习使用logstash,再安装好后准备验证下第一个demo的时候,出现了问题 Error: Expected one of #, input, filter, output at line ...

  3. MySQL基础原创笔记

    对表的增删改操作: 创建表: create table student (          id  int  primary key  auto_increment,          name   ...

  4. Lua学习----Lua的表达式

    前言 Lua的运算符和其他语言基本类似.但也有一点点区别 1.算术运算符 Lua的算术运算符加入了指数运算符^ print(2 ^ 10) -->打印 1024. 求2的10次方 2.关系运算符 ...

  5. undefined reference to `_init'问题解决

    今天利用CDT 的eclipse调试程序,遇到下面的问题: d:/plugin/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi ...

  6. linux中service *** start与直接运行/usr/bin/***的区别

    在linux想要运行启动一个服务有两种方法: 1,运行/etc/init.d/目录下的shell脚本,还可以有快捷方式,service *** start/ stop/restart /status, ...

  7. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】

    RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...

  8. 在IT行业换一个领域

    开发做了不到两个月,就不做了.原因是自己不喜欢开发,感觉开发的东西很麻烦.也许说到麻烦,很多人都要教训我了,干什么不麻烦.我也不想反驳什么,因为失败的次数太多了,反驳也无力. 从放弃开发开始到现在,抑 ...

  9. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  10. 解决Android SDK下载和更新失败的方法(Win系统) 和离线安装

    http://jingyan.baidu.com/article/a3a3f811f370558da2eb8a94.html http://jingyan.baidu.com/article/636f ...