广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    android开发基础教程—三种方式实现xml文件解析

    2018-04-04 08:34:43 次阅读 稿源:互联网
    广告
    1.sax方式
    代码如下:

    /**
    * 使用sax解析
    */
    public class SaxParse{
    /**
    * sax解析器
    */
    private SAXParser parser;
    public SaxParse(){
    try {
    SAXParserFactory f = SAXParserFactory.newInstance();
    parser = f.newSAXParser();
    } catch (ParserConfigurationException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public List<Person> doParse(InputStream is) {
    try {
    XmlHandler h = new XmlHandler();
    parser.parse(is,h);
    return h.getpersons();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }
    /**
    * 处理器
    */
    class XmlHandler extends DefaultHandler{
    List<Person> persons = null ;
    Person person = null ;
    //当前元素名称
    private String currEleName;
    /**
    * 文本节点触发该方法
    */
    public void characters(char[] ch, int start, int length)throws SAXException {
    String str = new String(ch,start,length);
    //name
    if("name".equals(currEleName)){
    person.name = str ;
    }
    else if("age".equals(currEleName)){
    person.age = Integer.parseInt(str);
    }
    }
    public void endDocument() throws SAXException {
    }
    /**
    * 元素结束
    */
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    if("person".equals(localName)){
    persons.add(person);
    }
    //将当前元素置空
    else if(("name".equals(currEleName)) || ("age".equals(currEleName))){
    this.currEleName = "" ;
    }
    }
    /**
    * 文档开始事件
    */
    public void startDocument() throws SAXException {
    persons = new ArrayList<Person>();
    }
    /**
    * 元素开始事件
    * localName:本地名
    * uri:名字空间
    * qName:限定名,前缀 + 本地名
    */
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    //实例化person对象
    if("person".equals(localName)){
    person = new Person();
    person.id = Integer.parseInt(attributes.getValue(0));
    }
    //name元素
    else if("name".equals(localName)){
    this.currEleName = "name" ;
    }
    //name元素
    else if("age".equals(localName)){
    this.currEleName = "age" ;
    }
    }
    public List<Person> getpersons(){
    return persons ;
    }
    }
    }

    2.dom方式
    代码如下:

    /**
    * DOM解析
    */
    public class DomParse{
    //
    private DocumentBuilder builder;
    public DomParse(){
    try {
    DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
    this.builder = f.newDocumentBuilder();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public List<Person> doParse(InputStream is) {
    List<Person> persons = new ArrayList<Person>();
    Person person = null ;
    try {
    Document doc = builder.parse(is);
    NodeList list = doc.getElementsByTagName("person");
    Element ele = null ;
    for(int i = 0 ; i < list.getLength() ; i ++){
    ele = (Element) list.item(i);
    person = new Person();
    person.id = Integer.parseInt(ele.getAttribute("id"));
    person.name = getSubElementTextContent(ele,"name");
    person.age = Integer.parseInt(getSubElementTextContent(ele,"age"));
    persons.add(person);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return persons;
    }
    /**
    * 得到指定的资源中中间的文本内容
    */
    private String getSubElementTextContent(Element ele, String tagName) {
    NodeList list = ele.getElementsByTagName(tagName);
    Element e = (Element) list.item(0);
    //得到中间的文本节点
    return e.getTextContent();
    }
    }

    3.pull方式
    代码如下:

    /**
    * pull解析,拉模式,可以手动控制下一个事件是否触发.
    */
    public class PullParse{
    public List<Person> doParse(InputStream is) {
    List<Person> persons = null ;
    Person person = null ;
    try {
    XmlPullParser parser = Xml.newPullParser();
    //设置解析数据源
    parser.setInput(is, "utf-8");
    //取得事件的类型
    int eventType = parser.getEventType();
    String eleName = null ;
    while(eventType != XmlPullParser.END_DOCUMENT){
    switch(eventType){
    //文档开始
    case XmlPullParser.START_DOCUMENT:
    persons = new ArrayList<Person>();
    break ;
    //元素开始
    case XmlPullParser.START_TAG:
    eleName = parser.getName();
    if("person".equals(eleName)){
    person = new Person();
    person.id = Integer.parseInt(parser.getAttributeValue(0));
    }
    else if("name".equals(eleName)){
    person.name = parser.nextText();
    }
    else if("age".equals(eleName)){
    person.age = Integer.parseInt(parser.nextText());
    }
    break ;
    //标记结束
    case XmlPullParser.END_TAG:
    eleName = parser.getName();
    if("person".equals(eleName)){
    persons.add(person);
    }
    break ;
    }
    //手动激活下个事件的触发
    eventType = parser.next();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return persons;
    }
    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告