从网上查到“SAX解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件”现在需要用SAX解析500M的XML,用VTD-XML解析报内存溢出。所以现在想改成SAX方式改写解析方式。最终,根据表名,将解析的内容放到不同的Excel中。现在的目的是,想了解SAX解析xml的步骤,思路。
另外,这句话比较迷惑。“SAX解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件”
另外,这句话比较迷惑。“SAX解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件”
import java.io.IOException;
import javax.xml.parsers.*;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* date 12008-12-16
* SAX解析XML文件
* 优点,简单
*
*/
public class SAXtoMyxml {
public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException {
// 通过工厂获得SAX解析器
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sax = sf.newSAXParser();
//解析器
// 通过解析器解析xml文件
sax.parse("myxml1.xml", new SAXHander()); //使用自定义的监听器
}
}
// 自定义sax解析监听器
class SAXHander extends DefaultHandler {
public void startDocument() throws SAXException {
System.out.println("文档开始 ");
-------------------------------------------------------------------------------- }
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("元素开始 "+qName);
}
public void characters(char[] ch, int start, int length) throws SAXException {
String text = new String(ch,start,length);
//去掉xml文件中的空格节点
if(text.trim().equals("")) {
return;
}
System.out.println("文本内容 "+text);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("元素结束 "+qName);
}
public void endDocument() throws SAXException {
System.out.println("文档结束 ");
}
}
XML文件太大的时候,只能用SAX这样的逐行处理的方法,用时间换空间了