SAX解析XML分为如下几步:
// **1.创建XML解析处理器**
// 使用XML_DefaultHandler创建XML解析处理器xml_Handler
XML_DefaultHandler xml_Handler = new XML_DefaultHandler();
// **2.创建SAX解析器**
// 使用SAXParserFactory创建SAX解析器工厂对象
SAXParserFactory sax_Factory = SAXParserFactory.newInstance();
// 使用SAX解析器工厂对象sax_Factory创建SAX解析器sax_Parser
SAXParser sax_Parser = sax_Factory.newSAXParser();
// **3.将XML解析处理器分配给解析器**
首先搭建解析的框架:
public void parse() throws Exception { // **1.创建XML解析处理器** // 使用XML_DefaultHandler创建XML解析处理器xml_Handler XML_DefaultHandler xml_Handler = new XML_DefaultHandler(); // **2.创建SAX解析器** // 使用SAXParserFactory创建SAX解析器工厂对象 SAXParserFactory sax_Factory = SAXParserFactory.newInstance(); // 使用SAX解析器工厂对象sax_Factory创建SAX解析器sax_Parser SAXParser sax_Parser = sax_Factory.newSAXParser(); // **3.将XML解析处理器分配给解析器** sax_Parser.parse(new FileInputStream(new File("UnGangMember.xml")), xml_Handler); }
根据框架,XML解析处理器搭建如下:
package sj.SaxResolutionXml_v01; import java.util.ArrayList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * XML解析处理器 * * @author Songjie_xuan * @time 2014-10-08 * */ public class XML_DefaultHandler extends DefaultHandler { private ArrayList<UnGang_Member> unMember_List; private String str_Values; private UnGang_Member unGang_Member; /** * 解析开始 */ @Override public void startDocument() throws SAXException { System.out.println("解析开始"); } /** * 解析结束 */ @Override public void endDocument() throws SAXException { System.out.println("解析结束"); } /** * 开始解析文档中的元素 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("unGang_Member".equals(qName)) { unGang_Member = new UnGang_Member(); unMember_List.add(unGang_Member); } } /** * 文档中的元素解析完毕 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equals("name")) { unGang_Member.name = str_Values; } else if (qName.equals("sex")) { unGang_Member.position = str_Values; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { str_Values = new String(ch, start, length); } }
解析文档要知道文档实例:
package sj.SaxResolutionXml_v01; /** * UnGang_Member节点 * * @author Songjie_xuan * @time 2014-10-08 * */ public class UnGang_Member { String status; String name; String position; public String toString() { return status + " " + name + " " + position; } }
XML文档如下:
<?xml version = "1.0" encoding = "UTF-8"?> <member confra='魔宗'> <level status='圣门二代弟子大师兄'> <name>七夜</name> <position>宗主</position> </level> <level status='圣门二代弟子小师弟'> <name>杨亦风</name> <position>护法</position> </level> </member>
XML文档通过SAX解析,由于其使用渐次解析从而避免了将文档全部加载到内存中,大大降低了内存的消耗,这是SAX解析最大的有点。