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

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;      //用于存储得到的title
	public String content;    //用于存储得到的content
	public String element;    //用于存储标签元素的key
	public 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{
		//创建一个SAXParserFactory
		SAXParserFactory 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值