SAX解析工具- Sun公司提供的。内置在jdk中。org.xml.sax.
核心的API:
SAXParser类: 用于读取和解析xml文件对象
parse(File f, DefaultHandler dh)方法: 解析xml文件
参数一: File:表示 读取的xml文件。
参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类
1.创建SAXParser对象 SAXParser parser=SAXParserFactory.newInstance().newSAXParser(); 2.调用parse方法 parser.parse(new File("./src/contact.xml"), new MyDefaultHandler()); } [一个类继承class 类名(extends DefaultHandler) 在调用是创建传进去
DefaultHandler类的API: void startDocument() : 在读到文档开始时调用 void endDocument() :在读到文档结束时调用 void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用 void endElement(String uri, String localName, String qName) :读到结束标签时调用 void characters(char[] ch, int start, int length) : 读到文本内容时调用
SAX代码例子:
public class SAXReadXML { public static void main(String[] args) { //创建SAXParserFactory对象 SAXParserFactory spf=SAXParserFactory.newInstance(); try { //创建SAXParser对象 SAXParser saxParser=spf.newSAXParser(); File file=new File(“D:\itcastworkspace\xmlSax\src\cn\itcast\sax\students.xml”); /*解析文件 *new XMLContentHandler() 事件处理程序*/ saxParser.parse(file, new XMLContentHandler()); }
catch (ParserConfigurationException e) { e.printStackTrace();}
catch (SAXException e) { e.printStackTrace();}
catch (IOException e) { e.printStackTrace();} }
}
public class XMLContentHandler extends DefaultHandler{ //当前元素中的数据 private String currentData; //取得元素数据 public void characters(char[] ch, int start, int length)throws SAXException { currentData=new String(ch,start,length); } //在解析整个文档结束时调用 public void endDocument() throws SAXException { System.out.println("结束文档"); } //在解析元素结束时调用 public void endElement(String uri, String localName, String name)throws SAXException { System.out.println("节点数据 *************************"+this.currentData); System.out.println("结束元素 ************"+name); } //在解析整个文档开始时调用 public void startDocument() throws SAXException { System.out.println("开始文档"); } //在解析元素开始时调用 public void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException { System.out.println("开始元素 ************"+name); } }