首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

sax解析xml尤其是获取元素的值也许内容

2012-09-21 
sax解析xml尤其是获取元素的值或者内容这个问题来自好友,自己也很少进行这方面的解析,只是以前在c#中用过,

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   感谢分享,辛苦了

热点排行