java sax解析xml_【转】java使用sax解析xml文件

从下面这个url搬运。http://hck.iteye.com/blog/1175762

不过程序略有改动。

关于sax(搬自百科)

SAX,全称Simple API for XML,既是指一种接口,也是指一个软件包。

SAX是事件驱动型 XML解析的一个标准接口不会改变      SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档 (document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

大多数SAX都会产生以下类型的事件:

1.在文档的开始和结束时触发文档处理事件。

2.在文档内每一XML元素接受解析的前后触发元素事件。

3.任何元数据通常由单独的事件处理

4.在处理文档的DTD或Schema时产生DTD或Schema事件。

5.产生错误事件用来通知主机应用程序解析错误。

SAX的常用接口

ContentHandler接口

ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包 中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及 元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。

ContentHandler接口的方法有以下几种:

void startDocument()

void endDocument()

void startElement(String uri, String localName, String qName, Attributes atts)

void endElement(String uri, String localName, String qName)

void characters(char[ ] ch, int start, int length)

DTDHandler接口,EntityResolver接口,ErrorHandler接口,这三个接口表示还没用过。

SAX解析文档过程举例

对于一个XML文档举例来说

Hello,World!

其解析的过程为:

1.start document

2.start element:doc......

3.start element:para.....

4.characters:Hello,World!

5.end element:para......

6.end element;doc......

7.end document

对于解析过程中的每一步都会有事件发生,都会触发相应接口中的事件处理程序。

说的差不多了,来看个程序。

Thinking in JAVA

11

Core JAVA2

22

C++ primer

33

// Book.java

public classBook {private intid;privateString name;private doubleprice;public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public doublegetPrice() {returnprice;

}public void setPrice(doubleprice) {this.price =price;

}publicString toString(){return "id = "+id + ",name = " + name + ",price = "+price;

}

}

// BooksDefaultHandler.java

importjava.util.ArrayList;importjava.util.List;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;

public class BooksDefaultHandler extendsDefaultHandler{private Listbooklist;privateBook currentBook;privateString tag;

@Overridepublic void startDocument() throwsSAXException {

booklist= new ArrayList();

}

@Overridepublic voidstartElement(String uri, String localName, String qName,

Attributes attributes)throwsSAXException {if("book".equals(localName)){

Integer id= new Integer(attributes.getValue(0));

currentBook= newBook();

currentBook.setId(id);

}

tag=localName;

}

@Overridepublic void characters(char[] ch, int start, intlength)throwsSAXException {if(tag != null){

String data= newString(ch,start,length);if("name".equals(tag)){

currentBook.setName(data);

}else if ("price".equals(tag)){

Double price= newDouble(data);

currentBook.setPrice(price);

}

}

}

@Overridepublic voidendElement(String uri, String localName, String qName)throwsSAXException {if("book".equals(localName)){

booklist.add(currentBook);

currentBook= null;

}

tag= null;

}public ListgetBooklist() {returnbooklist;

}

}

// SAXBook.java

importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.util.List;importorg.xml.sax.ContentHandler;importorg.xml.sax.InputSource;importorg.xml.sax.SAXException;importorg.xml.sax.XMLReader;importorg.xml.sax.helpers.XMLReaderFactory;

public classSAXBook {public static void main(String[] args) throwsFileNotFoundException, IOException, SAXException{

BooksDefaultHandler contentHandler= newBooksDefaultHandler();

XMLReader reader=XMLReaderFactory.createXMLReader();

reader.setContentHandler(contentHandler);

reader.parse(new InputSource(new FileReader("d:/90.Temp/books.xml")));

List booklist=contentHandler.getBooklist();for(Object book : booklist){

System.out.println((Book)book);

}

}

}

输出:

id = 1,name = Thinking in JAVA,price = 11.0id= 2,name = Core JAVA2,price = 22.0id= 3,name = C++ primer,price = 33.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SAXJava生成XML的步骤如下: 1. 创建一个 SAXParserFactory 实例并且用它来创建一个 SAXParser 对象。 2. 创建一个 DefaultHandler 的子类实例。 3. 调用 SAXParser 的 parse() 方法,并将 XML 文件名和 DefaultHandler 子类实例作为参数传入。 下面是一个使用 SAXJava 创建 XML 文件的示例代码: ```java import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; public class CreateXMLWithSAX { public static void main(String[] args) throws Exception { // 创建 SAXParserFactory 和 SAXParser 对象 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); // 创建 DefaultHandler 的子类实例 MyHandler handler = new MyHandler(); // 调用 parse() 方法解析 XML 文件 saxParser.parse(new File("students.xml"), handler); } } class MyHandler extends DefaultHandler { // 重写 startDocument() 方法 public void startDocument() throws SAXException { System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); System.out.println("<students>"); } // 重写 startElement() 方法 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.print("<" + qName); for (int i = 0; i < attributes.getLength(); i++) { System.out.print(" " + attributes.getQName(i) + "=\"" + attributes.getValue(i) + "\""); } System.out.print(">"); } // 重写 characters() 方法 public void characters(char[] ch, int start, int length) throws SAXException { System.out.print(new String(ch, start, length)); } // 重写 endElement() 方法 public void endElement(String uri, String localName, String qName) throws SAXException { System.out.print("</" + qName + ">"); } // 重写 endDocument() 方法 public void endDocument() throws SAXException { System.out.println("</students>"); } } ``` 这个示例程序会读取名为 "students.xml" 的 XML 文件,并将其化为以下格式的 XML: ```xml <?xml version="1.0" encoding="UTF-8"?> <students> <student id="1001">Tom</student> <student id="1002">Jerry</student> <student id="1003">Mike</student> </students> ``` 注意:这个示例程序中,MyHandler 类继承了 DefaultHandler 类,并且重写了其中的方法,这些方法会在 SAX 解析过程中被调用。在这些方法中,我们可以根据需要对 XML 文件进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值