</pre><p><span style="font-size:14px;">xml文件为myClass.xml:</span></p><p><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>张三传记</title> <author>张三</author> </book> <book id="002"> <title>李四传记</title> <author>李四</author> </book> </books>这个类主要就是重写了DefaultHandler类的方法。然后getList和getReader方法就是便于测试的。
package cn.spy.reader; 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; import cn.spy.po.Book; public class SaxReader extends DefaultHandler{ ArrayList<Book> list=new ArrayList<Book>(); private String currentTag; private Book book; @Override public void characters(char[] ch,int start,int length) throws SAXException { if("title".equals(currentTag)){ String title=new String(ch,start,length); book.setTitle(title); } if("author".equals(currentTag)){ String author=new String(ch,length); book.setAuthor(author); } } @Override public void endElement(String uri,String localName,String qName) throws SAXException { if("book".equals(qName)){ list.add(book); book=null; } currentTag=null; } @Override public void startElement(String uri,String qName,Attributes attributes) throws SAXException { currentTag=qName; if("book".equals(currentTag)){ book=new Book(); } } public ArrayList<Book> getList(){ return list; } public XMLReader getReader() throws ParserConfigurationException,SAXException { SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); XMLReader reader=parser.getXMLReader(); return reader; } }测试类:
public class SaxTest { public static void main(String[] args) throws Exception{ SaxReader saxReader=new SaxReader(); XMLReader reader=saxReader.getReader(); reader.setContentHandler(saxReader); reader.parse("src/myClass.xml"); ArrayList<Book> arrayList=saxReader.getList(); for(Book book:arrayList){ System.out.println(book.getTitle()+":"+book.getAuthor()); } } }
测试结果:
张三传记:张三
李四传记:李四
API:
startElement:
-
uri
- 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 -
localName
- 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。 -
qName
- 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。 -
attributes
- 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 -
endElement:
-
接收元素结束的通知。
-
默认情况下,不执行任何操作。应用程序编写者可以在子类中重写此方法,以便在每个元素的结束处采取特定的操作(如,结束树节点或将输出写入文件)。
-
uri
- 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 -
localName
- 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。 -
qName
- 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
characters:
-
ch
- 字符。
-
start
- 字符数组中的开始位置。
-
length
- 从字符数组中使用的字符数。
ch
- 字符。
start
- 字符数组中的开始位置。
length
- 从字符数组中使用的字符数。