sax解析xml尤其是获取元素的值或者内容
这个问题来自好友,自己也很少进行这方面的解析,只是以前在c#中用过,所以也顺便搜了一下获得如下数据:http://www.ibm.com/developerworks/cn/xml/x-saxd/
package lulusoft.jspbuilderv10.parser;import org.xml.sax.*;import org.xml.sax.helpers.*;import java.io.*;import org.apache.xerces.parsers.SAXParser;import java.util.Stack;import lulusoft.jspbuilderv10.common.*;public class CXmlParser extends org.xml.sax.helpers.DefaultHandler{ /**私有属性*/ CXmlElement root = null; private CharArrayWriter contents = new CharArrayWriter(); private Stack stack = null; /** * 功能描述:构造函数 */ public CXmlParser(){ super(); stack = new Stack(); } /** * 功能描述:标签起始 */ public void startElement( String namespaceURI, String localName, String qName, Attributes attr ) throws SAXException { contents.reset(); String cn = attr.getValue("classname"); if(cn==null || cn.trim().equals("")){ System.out.println("标签未有对应的类!请检查!"); } CXmlElement element = CXmlElement.createElement(cn); int size = attr.getLength() ; for(int i=0;i<size;i++){ String name = attr.getQName(i); String value = attr.getValue(i); if(name.equals("classname")){ continue; } element.addAttribute(name,value); } stack.push(element); } /** * 功能描述:标签结束 */ public void endElement(String namespaceURI, String localName, String qName ) throws SAXException { if(stack.size() > 1){ CXmlElement element1 = (CXmlElement)stack.pop(); CXmlElement element2 = (CXmlElement)stack.pop(); if(contents.toString().trim()!= null){ element1.setElementValue(contents.toString().trim()); } element2.addContainElement(element1); stack.push(element2); } else{ root = (CXmlElement)stack.peek(); } } /** * 功能描述:获得root数据包 */ public CXmlElement getRoot(){ return root; } public void characters( char[] ch, int start, int length ) throws SAXException { contents.write(ch,start,length); } /** * 功能描述:解析xml并返回数据 * @param fileName String xml文件名称 * @return CXmlElement */ public static CXmlElement parseDocument(String fileName){ CXmlParser m_oXmlParser = new CXmlParser(); try { XMLReader xr = new SAXParser(); xr.setContentHandler(m_oXmlParser); xr.parse( new InputSource(new FileReader( fileName )) ); } catch ( SAXParseException saxParseException ) { System.out.println("Parsing Error:"); System.out.println("行:"+saxParseException.getLineNumber()); System.out.println("列:"+saxParseException.getColumnNumber()); System.out.println(" "+saxParseException.getMessage()); } catch(SAXException saxException){ saxException.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } return m_oXmlParser.getRoot(); } }
?原文中有上面代码的下载 我这里就不上传了?,大家关心的还是android上面的解析吧,提供了一个例子,例子不全是我写的希望对你有用
1 楼 jianghao3616 2011-12-27 感谢分享,辛苦了