day day up--Java编程之SAX解析XML文件

来源:互联网 发布:微商城 淘宝客 编辑:程序博客网 时间:2024/05/29 13:31

SAX(Simple API for XML),是Java解析XML文件的一种方案,它边读取文件边解析,它是事件驱动型的,简单说就是扫描过程中任何时候遇到某个节点,即触发其相应的处理函数对节点或者内容进行解析处理。使用SAX来解析文件更快、效率更高,方法实现也简单,首先得根据需求实现你自己对文件内容处理的ContentHandler,定义处理的方法方式,然后XML解析器根据这个ContentHandler的规定来解析取得你想要的数据。实现方式如下。

<item>  <title>SAX解析</title>  <content>SAX解析是Java对XML文件进行解析的一种方案</content></item><item>...</item>


首先实现自己的ContentHandler:

public class MyContentHandler extends DefaultHandler {public static final String tag = "MyContentHandler";public String title;      //用于存储得到的titlepublic String content;    //用于存储得到的contentpublic String element;    //用于存储标签元素的keypublic StringBuffer sb;   //用于拼接元素的String值,防止元素值过长导致解析内容丢失的问题public void startDocument() throws SAXException {Log.i(tag, "startDocument");        //开始解析文档}public void endDocument() throws SAXException {Log.i(tag, "endDocument");          //文档解析结束}public void startElement(String namespaceURI, String localName,String qName, Attributes attr) throws SAXException {   //开始解析元素if (localName.equals("title")){element = localName;return;}if(localName.equals("content")){element = localName;return;}}public void endElement(String namespaceURI, String localName, String qName)throws SAXException {                           //对应的元素解析结束Log.i(tag, "endElement:"+localName);if(localName.equals("title"))Log.i(tag, "title="+title);if(localName.equals("content"))Log.i(tag, "content"+content);}public void characters(char[] ch, int start, int length)throws SAXException {                         //元素对应value的处理String s = null;if (element.equals("title")){s = new String(ch, start, length);sb.append(s);title = sb.toString();}if (element.equals("content") ){s = new String(ch, start, length);sb.append(s);content = sb.toString();}}}

在characters()方法里面进行内容处理的时候,如果ch过长,它会再次执行该方法接着读取value,直到取到所有的value,所以可能会多次执行该方法,用StringBuffer进行内容拼接防止丢失。然后结束该元素的解析后对value进行处理即可。然后创建XML解析器,设定ContentHandler,即可开始解析。自己创建方法XMLParser,将ContentHandler作为参数传入就可以了。resultStr是读取的文件内容,parse方法里也可以放文件的URL。

/* * XML解析器创建 */public XMLParser(String resultStr,ContentHandler handler){try{//创建一个SAXParserFactorySAXParserFactory factory = SAXParserFactory.newInstance();XMLReader reader = factory.newSAXParser().getXMLReader();//为XMLReader设置内容处理器reader.setContentHandler(handler);//开始解析文件reader.parse(new InputSource(new StringReader(resultStr)));}catch(Exception e){e.printStackTrace();}}


0 0
原创粉丝点击