`
liubuzhudeyun
  • 浏览: 12115 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 中的SAX解析XML的使用(一)

 
阅读更多
读取的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 !");
	}
}
分享到:
评论

相关推荐

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    Sax解析XML文件解析

    总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...

    JAVA100例之实例69 JAVA使用SAX解析XML

    总的来说,“JAVA100例之实例69 JAVA使用SAX解析XML”旨在帮助开发者理解并掌握SAX解析器的使用,通过编写回调函数实现对XML文档的解析和处理,提升在实际项目中的XML处理能力。通过学习这个实例,你可以更深入地...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    java解析xml数据---sax解析器

    以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...

    Servlet利用SAX解析XML文档

    本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...

    sax解析xml尤其是获取元素的值或者内容

    在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...

    sax解析xml

    通过以上步骤,我们就能使用SAX解析XML文档了。这种解析方式适用于处理大文件,因为它不会一次性加载整个XML文档到内存,而是按需逐行读取,从而节省内存资源。在实际项目中,可以根据需求定制ContentHandler来实现...

    sax解析xml文件

    在本项目中,"saxloadxml"应该是实现了一个SAX解析XML文件的示例,旨在帮助开发者理解和应用SAX解析。 首先,我们需要理解SAX解析的基本原理。当解析器读取XML文件时,它会触发一系列的事件,如开始文档、结束文档...

    java sax 解析xml

    总之,Java SAX解析XML是一种高效的处理方式,尤其适用于大型XML文档。通过自定义ContentHandler和ErrorHandler,我们可以灵活地对XML数据进行操作,而不会因为内存限制而受到影响。在实际开发中,了解并熟练掌握SAX...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    "sax_xml sax_解析_xml"标签表明了本压缩包包含使用SAX解析XML的示例代码。 3. **JDOM**:JDOM是一个Java API,专门用于读写XML文档。它提供了一个更面向Java的对象模型,使得XML处理更加直观。JDOM在DOM的基础上...

    javaSAX方式解析xml文档

    Java SAX方式解析XML文档是一种高效的处理大型XML文件的方法,它基于事件驱动模型,不将整个XML文档加载到内存中,而是逐个处理XML元素。这种方式非常适合处理大文件,因为它节省了内存,但需要编写更多的代码来处理...

    JAVA SAX解析XML

    **JAVA SAX解析XML** 在Java编程中,XML(Extensible Markup Language)是一种广泛使用的数据交换格式,用于存储和传输结构化数据。为了处理XML文档,Java提供了两种主要的解析方式:DOM(Document Object Model)...

    SAX解析XML实例

    总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...

    读取RSS-SAX解析XML实例(java版)

    标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...

    java Sax解析Xml

    以下是一个简单的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使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    sax解析xml本地读取xml

    标题“sax解析xml本地读取xml”指的是使用SAX解析器来读取和解析存储在本地文件系统中的XML文件。这种方式适用于处理那些无法一次性加载到内存中的大型XML文档,或者对于内存有限的环境。 SAX解析的基本工作原理...

Global site tag (gtag.js) - Google Analytics