读取的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<name>Thinking in java</name>
<price>89</price>
</book>
<book id="3">
<name>Spring in Action</name>
<price>46</price>
</book>
<book id="9">
<name>Java Web development start</name>
<price>12</price>
</book>
</books>
public class SAXTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
getBooks();
}
public static void getBooks() throws Exception
{
List<Book> books = new ArrayList<Book>();//保存book
SAXParserFactory saxFactory = SAXParserFactory.newInstance();//sax转换工厂类
SAXParser parser = saxFactory.newSAXParser();//创建一个新的转换器
//文件输入流
FileInputStream fi = new FileInputStream(SAXTest.class.getClassLoader().getResource("Test.xml").getPath());
SAXHandler handler = new SAXHandler(books);//xml处理类
parser.parse(fi, handler);//读取xml
books = handler.getBooks();//获取books
for(Book book : books)//输出
{
System.out.println("ID: " + book.getId() + " Name: "+ book.getName() + " Price: " + book.getPrice());
}
}
}
//xml文件读取的处理类
public class SAXHandler extends DefaultHandler {
//存放书籍
private List<Book> books ;
private String preElement = null;//存放之前一个Element
private Book book = null;//存放一本书
public SAXHandler(List<Book> books)
{
this.books = books;
}
public SAXHandler(){
}
public List<Book> getBooks()
{
return books;//返回list
}
@Override
public void startDocument() throws SAXException {
//标识文档的开始
System.out.println("the document start");
//创建一个list来
books = new ArrayList<Book>();
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//当一个元素开始时,调用此方法
System.out.println("start element " + qName);
if("book".equals(qName))
{
book = new Book();//创建一本书
book.setId(Integer.parseInt(attributes.getValue(0)));
}
preElement = qName;//获取当前元素
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//一个元素结束时调用此方法
System.out.println("end element " + qName);
if("book".equals(qName))//判断当前结束的元素是不是book
{
books.add(book);//加入list中
book = null;//清空
System.out.println();//换一行
}
preElement = null;//将前一个元素清空
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//当为文本节点时调用此方法
//判断上个节点是不是name
if("name".equals(preElement)){
if(book == null)
{
book = new Book();
}
book.setName(new String(ch,start,length));
}
//判断上个节点是否price
if("price".equals(preElement)){
if(book == null)
{
book = new Book();
}
book.setPrice(Float.parseFloat(new String(ch,start,length)));
}
}
@Override
public void endDocument() throws SAXException {
//文档结束时调用
System.out.println("end document !");
}
}
分享到:
相关推荐
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...
总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...
总的来说,“JAVA100例之实例69 JAVA使用SAX解析XML”旨在帮助开发者理解并掌握SAX解析器的使用,通过编写回调函数实现对XML文档的解析和处理,提升在实际项目中的XML处理能力。通过学习这个实例,你可以更深入地...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...
本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...
在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...
通过以上步骤,我们就能使用SAX解析XML文档了。这种解析方式适用于处理大文件,因为它不会一次性加载整个XML文档到内存,而是按需逐行读取,从而节省内存资源。在实际项目中,可以根据需求定制ContentHandler来实现...
在本项目中,"saxloadxml"应该是实现了一个SAX解析XML文件的示例,旨在帮助开发者理解和应用SAX解析。 首先,我们需要理解SAX解析的基本原理。当解析器读取XML文件时,它会触发一系列的事件,如开始文档、结束文档...
总之,Java SAX解析XML是一种高效的处理方式,尤其适用于大型XML文档。通过自定义ContentHandler和ErrorHandler,我们可以灵活地对XML数据进行操作,而不会因为内存限制而受到影响。在实际开发中,了解并熟练掌握SAX...
"sax_xml sax_解析_xml"标签表明了本压缩包包含使用SAX解析XML的示例代码。 3. **JDOM**:JDOM是一个Java API,专门用于读写XML文档。它提供了一个更面向Java的对象模型,使得XML处理更加直观。JDOM在DOM的基础上...
Java SAX方式解析XML文档是一种高效的处理大型XML文件的方法,它基于事件驱动模型,不将整个XML文档加载到内存中,而是逐个处理XML元素。这种方式非常适合处理大文件,因为它节省了内存,但需要编写更多的代码来处理...
**JAVA SAX解析XML** 在Java编程中,XML(Extensible Markup Language)是一种广泛使用的数据交换格式,用于存储和传输结构化数据。为了处理XML文档,Java提供了两种主要的解析方式:DOM(Document Object Model)...
总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...
标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...
以下是一个简单的SAX解析XML的Java示例: ```java import org.xml.sax.XMLReader; import org.xml.sax.InputSource; import org.xml.sax.helpers.DefaultHandler; public class SaxDemo { public static void ...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
标题“sax解析xml本地读取xml”指的是使用SAX解析器来读取和解析存储在本地文件系统中的XML文件。这种方式适用于处理那些无法一次性加载到内存中的大型XML文档,或者对于内存有限的环境。 SAX解析的基本工作原理...