sax解释xml

xml文件内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>

<book>

<name>三国演义</name>

<author>罗贯中</author>

<price>50rmb</price>

</book>

<book>

<name>水浒传</name>

<author>施耐庵</author>

<price>60rmb</price>

</book>

<book>

<name>红楼梦</name>

<author>曹雪芹</author>

<price>70rmb</price>

</book>

<book>

<name>西游记</name>

<author>吴承恩</author>

<price>80rmb</price>

</book>

</books>

//解析代码

package domdemo;

import java.util.ArrayList;

import java.util.List;

import javax.xml.namespace.QName;

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 saxXMLparse {

public static void main(String[] args) throws Exception{

//第一种方法

SAXParser sax= SAXParserFactory.newInstance().newSAXParser();

sax.parse("src/demo1.xml",new DefaultHandler(){

Book book=null;

String node=null;

List<Book> books=new ArrayList<Book>();

@Override

public void startDocument() throws SAXException {

System.out.println("开始解析xml");

}

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("xml解析结束,遍历books");

for(Book b:books){

System.out.println("书名"+b.getBookName());

System.out.println("作者"+b.getAuthor());

System.out.println("价格"+b.getPrice());

}

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes)

throws SAXException {

if("book".equals("book")){

book=new Book();

}

node=qName;

System.out.println(node);

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

System.out.println(new String(ch,start,length));

if("name".equals(node))

book.setBookName(new String(ch,start,length));

if("author".equals(node)){

System.out.println(node);

book.setAuthor(new String(ch,start,length));}

if("price".equals(node))

book.setPrice(Double.parseDouble(new String(ch,start,2)));

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

// TODO Auto-generated method stub

if("book".equals(qName)){

books.add(book);

book=null;

}

node=null;

}

});

//第二种方法

List<Book> books=new ArrayList<Book>();

SAXParser sax1= SAXParserFactory.newInstance().newSAXParser();

XMLReader reader=sax1.getXMLReader();

reader.setContentHandler(new DefaultHandler(){

Book book=null;

String node=null;

@Override

public void startDocument() throws SAXException {

System.out.println("开始解析xml");

}

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("xml解析结束,遍历books");

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes)

throws SAXException {

if("book".equals("book")){

book=new Book();

}

node=qName;

System.out.println(node);

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

System.out.println(new String(ch,start,length));

if("name".equals(node))

book.setBookName(new String(ch,start,length));

if("author".equals(node)){

System.out.println(node);

book.setAuthor(new String(ch,start,length));}

if("price".equals(node))

book.setPrice(Double.parseDouble(new String(ch,start,2)));

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

// TODO Auto-generated method stub

if("book".equals(qName)){

books.add(book);

book=null;

}

node=null;

}

});

reader.parse("src/demo1.xml");//加载xml文件

for(Book b:books){//遍历

System.out.println("书名"+b.getBookName());

System.out.println("作者"+b.getAuthor());

System.out.println("价格"+b.getPrice());

}

}

}

//创建book类

class Book{

private String bookName;

private String author;

private double price;

public String getBookName() {

return bookName;

}

public void setBookName(String bookName) {

this.bookName = bookName;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

}

时间: 2024-10-10 15:06:50

sax解释xml的相关文章

Python:使用基于事件驱动的SAX解析XML

SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 您可能已经知道语法分析器有两类接口 - 基于对象的(如:DOM)和基于事件(如:SAX)的接口. DOM是基于对象的语法分析器的标准 API. 作为基于对象的接口,DOM 通过在内存中显示地构建对象树来与应用程序通信.对象树是 XML 文件中元素树的精确映射. DOM 易于学习和使用,因为它与基本

安卓SAX解析XML出现二次解析-------矫正我们错误的认知

问题:一个标签解析了俩次 贴图为证吧: targetPositionX0与targetPositionY0在XML文件中个数完全一致,但是解析时,Y0却经过了俩次解析.后面是字符数(不影响). 网上关于如何用Sax解析XML到处都是,我在之前的文章中也提到过,但经过今天的问题,才知道,之前的方法不够完整.下面 就说下问题出现的原因吧. Sax一次只能解析2k左右的文件,所以当标签中内容超过这个大小时,就要进行第二次解析.体现在characters()函数取标签中内 容,一次取不完,所以才出现上述

SAX解析XML

SAX 事件处理(事件驱动),不需要载入整个文档,流机制读取,分析XML文档 startDocument startElement character endElement endDocument 当sax扫描到文档时就调用startDocument函数,sax扫描到文档结束符时就调用endDocument函数,也就是说当sax扫描到哪个节点时就会调用相应的函数,同时还会携带节点的属性值. 当它扫描到节点内容值时就会调用character函数 Sax主要是用来对xml文件遍历,解析,不提供修改.

6. SAX解析XML

SAX解析: SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分: 解析器和事件处理器 : 1. 解析器可以使用SAXP的API创建,创建出SAX解析器后, 就可以指定解析器去解析某个XML文档. 解析器采用SAX方式在解析某个XML文档时, 它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法, 解析器在调用事件处理器的方法时, 会把当前解析到的xml文件内容作为方法的参数传递给事件处理器. 2. 事件处理器由程序员编写,程序员通过事件处理器

XML学习笔记(二):使用 DOM和SAX 解析XML :

一.XML解析的简介 1.一般来说xml解析的方式有两种,Dom与SAX,且各有优缺点.pull是第三种方法见:pull解析XML 1)DOM:dom对象树 ①.整个XML放入内存,转换为Document对象: ②.每个元素,转换成Element对象 ③.文本,转换成Text对象 ④.属性,转换成Attribute对象 优缺点:元素的CRUD比较简单,但是内存消耗大,大的xml文档不适合. 补充:内存不足时,可以修改参数,调整JVM的内存大小 1.java.lang.OutOfMemoryErr

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

android学习二十二(使用SAX解析xml)

上一篇博客是使用Pull解析xml文件的,Pull解析方式虽然非常好用,但它并不是我们唯一的选择.SAX解析也是一种特别常用的XML解析方式,虽然它的用法比Pull解析复杂,但在语义方面会更加的清楚. 通常情况下我们都会新建一个类继承自DefaultHandler,并重写父类的五个方法,如下所示: package com.jack.networktest; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import

Android 使用pull,sax解析xml

pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); XmlPullParser pullParser=factory.newPullParser(); //直接获得实例XmlPullParser pullParser= Xml.newPullParser(); 2.设置解析内容 通过setInput方法设置解析内容  

iOS开发2-使用SAX解析XML数据

XML数据结构和解析 1.1XML数据结构 XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息.创建的文件,或文档实例 由元素(标记)和内容构成.当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档.元素的描述性越强,文档各部分越容易识别.自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标