SAX解析示例

来源:互联网 发布:师洋的淘宝店是正品吗 编辑:程序博客网 时间:2024/06/07 06:22

简介

关于Html DOM中的Node对象的namespace,localname等属性的详细解释,参见(W3C)。

Book.xml

<!--  <?xml version="1.0" encoding="UTF-8"?>  <书架>     <书>          <书名 name="hello" value="world">海的女儿</书名>          <作者>安徒生</作者>          <售价>50.0元</售价>     </书>     <书>          <书名>卖火柴的小女孩</书名>          <作者>安徒生</作者>          <售价>28.0元</售价>     </书>  </书架>   --><!--<html>    <head>        <title>我的第一个 HTML 页面</title>    </head>    <body>        <font color="red" size="4">body 元素的内容会显示在浏览器中。</font>        <p>title 元素的内容会显示在浏览器的标题栏中。</p>    </body></html> --><!--   Copyright w3school.com.cn  --><bookstore>123<book xmlns:c="http://www.w3school.com.cn/children/" category="CHILDREN">        <c:title c:lang="en">Harry Potter</c:title>        <author>J K. Rowling</author>        <c:year>2005</c:year>        <c:price>29.99</c:price>    </book>    <book xmlns:x="http://www.w3school.com.cn/xml/" category="WEB">        <x:title x:lang="en">Learning XML</x:title>        <x:author>Erik T. Ray</x:author>        <x:year>2003</x:year>        <x:price>39.95</x:price>    </book></bookstore>

SAXParse

package saxTest;import java.io.IOException;import java.util.ArrayList;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;class BeanListHandler extends DefaultHandler {    // 将读取的内容存放到一个book对象中,存放到list集合中    ArrayList<Book> list = new ArrayList<Book>();    private String currentTag;    private Book book;    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        System.out.println("startElement: ");        //System.out.println("uri=" + uri);        System.out.println("localName=" + localName);        System.out.println("qName=" + qName);        System.out.println("");        for(int i = 0; i < attributes.getLength(); i++) {            System.out.println(attributes.getQName(i) + "|" + attributes.getValue(i));        }        System.out.println("");        currentTag = qName;        if("书".equals(currentTag)) {            book = new Book();        }    }    @Override      public void characters(char[] ch, int start, int length)  //注意xml文件中的换行符也会引起这个函数的调用            throws SAXException {          System.out.println("currentTag=" + currentTag);        System.out.println("currentStr=" + new String(ch, start, length));        System.out.println("");        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 {          System.out.println("endElement: ");        //System.out.println("uri=" + uri);        System.out.println("localName=" + localName);        System.out.println("qName=" + qName);        if("书".equals(qName)) {              list.add(book);              book = null;          }          currentTag = null;      }      public ArrayList<Book> getBooks() {          return list;      }  }public class SAXParse {    @SuppressWarnings("unchecked")      public static void main(String[] args) throws ParserConfigurationException,              SAXException, IOException {          // 创建解析工厂          SAXParserFactory factory = SAXParserFactory.newInstance();          // 创建解析器          SAXParser parser = factory.newSAXParser();          // 得到读取器          XMLReader reader = parser.getXMLReader();          // 设置内容处理器          BeanListHandler handler = new BeanListHandler();          reader.setContentHandler(handler);          // 读取xml文档          reader.parse("src/books.xml");          ArrayList list = handler.getBooks();          Book book;          for(int i = 0; i < list.size(); i++) {              book = new Book();              book = (Book) list.get(i);              System.out.println(book.getName() + book.getAuthor() + book.getPrice());          }      }  }
0 0
原创粉丝点击