xml解析

1、Dom解析http://www.cnblogs.com/shenliang123/archive/2012/05/11/2495252.html

//得到DOM解析器的工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//从DOM工厂中获得DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();

//通过DocumentBuilder的parse方法获得一个文档对象
//Document doc = builder.parse(InputStream);
Document doc = builder.parse(".xml");

//得到根节点
Element root = doc.getDocumentElement();

//得到root节点内名称为student的元素的节点列表
NodeList nodeList = root.getElementsByTagName("student");

//遍历该集合,从集合中取出信息
。。。

//一些常用方法
Node node =list.item(i);//取出列表中内的一个节点
node.getNodeType()//获得节点类型
node.getNodeName()//获得该节点名称
node.getFirstChild()//获得该节点的第一个子节点
node.getNodeValue())//获得该节点的值
node.getAttribute("")//通过名称获得属性值


2、SAX解析http://www.cnblogs.com/felix-hua/archive/2012/01/10/2317404.html

//新建一个工厂类SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();

//让工厂类产生一个SAX的解析类SAXParser
SAXParser parser = factory.newSAXParser();

//使用SAXParser的parser方法传入xml流和自定义的Handeler,解析开始
parser.parse(is,new MyHandeler);

//自定义Handeler:
class MyHandler extends DefaultHandler{
//当解析文档开始时回调此方法
 startDocument()
 
//当解析文档结束时回调此方法
 endDocument() 

//当解析到一个元素开始时回调此方法
 startElement(String uri, String localName, String qName,Attributes attributes){
//localName不带命名空间 qName带命名空间
 attributes.get(String attrID)//获得名称为attrID的属性值
 
 }

//当解析到一个元素结束时回调此方法
 endElement(String uri, String localName, String qName) 

//当解析到元素的内容时回调此方法
 characters(char[] ch, int start, int length)
     
}

3、Pull解析

//新建一个XmlPullParserFactory工厂类
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();

//新建一个XmlPullParser解析器
XmlPullParser parser=factory.newPullParser();

//使用XmlPullParser的setInput方法设置要解析的xml流和编码
parser.setInput(XmlPullParser, "utf-8");

int event = parser.getEventType();//产生第一个事件  
while(event!=XmlPullParser.END_DOCUMENT){  
    switch(event){  
    case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件  
        books = new ArrayList<Book>();//初始化books集合  
        break;  
    case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件  
        if("book".equals(parser.getName())){//判断开始标签元素是否是book  
            book = new Book();  
            book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id  
        }  
        if(book!=null){  
            if("name".equals(parser.getName())){//判断开始标签元素是否是name  
                book.setName(parser.nextText());  
            }else if("price".equals(parser.getName())){//判断开始标签元素是否是price  
                book.setPrice(Float.parseFloat(parser.nextText()));  
            }  
        }  
        break;  
    case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件  
        if("book".equals(parser.getName())){//判断结束标签元素是否是book  
            books.add(book);//将book添加到books集合  
            book = null;  
        }  
        break;  
    }  
    event = parser.next();//进入下一个元素并触发相应事件  
}
return books;

posted on 2013-01-03 16:16  @与非  阅读(792)  评论(0编辑  收藏  举报