<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </book> <book id="2"> <name>安徒生童话</name> <year>2004</year> <price>77</price> <language>English</language> </book> </bookstore>
handler.java类
package xmltes; import javax.xml.stream.events.Characters; import javax.xml.stream.events.StartElement; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class handler extends DefaultHandler{ private static int bookNum = 0; //遍历xml文件的最先标签 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 挪用DefaultHandler父类的startElement要领 super.startElement(uri, localName, qName, attributes); //推断是不是是有属性的标签/如book if(qName.equals("book")){ bookNum++; System.out.println("====================最先遍历第"+bookNum+"书的内容================"); //最先剖析book元素 //已知book元素下属性的称号,能够依据称号推断 /* String value = attributes.getValue("id"); System.out.println("book的属性值是" + value);*/ //假如不知道数的属性称号 int num = attributes.getLength(); for(int i=0;i<num;i++){ System.out.println("书的第" + (i+1) + "个属性名是:"+attributes.getQName(i)+"===属性值是:" + attributes.getValue(i)); } }else if(!qName.equals("book") && !qName.equals("bookstore") ){ System.out.println("节点名是:" + qName); } } //遍历xml文件的完毕标签 @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); //推断这本书是不是遍历完毕 if(qName.equals("book")){ System.out.println("====================完毕遍历第"+bookNum+"书的内容================"); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); String value = new String(ch, start, length); if(!value.trim().equals("")){ System.out.println(value); } } //用来标识剖析最先 @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); // System.out.println("进入标识剖析最先要领"); } //用来标识剖析完毕 @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); // System.out.println("进入标识剖析完毕要领"); } }
Test类
package xmltes; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SAXTest { public static void main(String[] args) { try { //猎取一个SAXParserFactory的实例 SAXParserFactory factory = SAXParserFactory.newInstance(); //经由过程factory猎取SAXParser实例 SAXParser parser = factory.newSAXParser(); //建立一个SAXParserHandler对象 handler handler = new handler(); parser.parse("001.xml", handler); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
以上就是XML文件运用SAX要领读取的示例代码的细致内容,更多请关注ki4网别的相干文章!