sax解析xml尤其是获取元素的值或者内容

本文介绍了一段使用C#实现的XML解析器代码,包括构造函数、标签起始和结束处理方法以及XML文件解析过程。代码示例涵盖了创建元素、设置属性、读取文本内容等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题来自好友,自己也很少进行这方面的解析,只是以前在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上面的解析吧,提供了一个例子,例子不全是我写的希望对你有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值