SAX解析XML文档
程序员文章站
2022-05-28 08:31:37
...
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解析最大的有点。
上一篇: SAX解析操作
下一篇: 使用JDOM解析XML(转载)