亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android中數據解析的五種方式

2019-10-21 21:25:10
字體:
來源:轉載
供稿:網友

這里有一份XML文件,接下來我們用不同的解析方式來解析這份文件

<?xml version="1.0" encoding="UTF-8"?><Movies>  <Movie id="1">    <name>憤怒的小鳥</name>    <type>Animation</type>    <year>2016</year>  </Movie>  <Movie id="2">    <name>葉問3</name>    <type>Action</type>    <language>English</language>  </Movie></Movies>

1.DOM解析

//1.創建一個DocumentBuilderFactory對象    DocumentBuilderFactory dBuilderFactory=DocumentBuilderFactory.newInstance();    try {      //2.創建一個DocumentBuilder對象      DocumentBuilder dBuilder=dBuilderFactory.newDocumentBuilder();      //3.獲取Document對象      Document document=dBuilder.parse("Movie.xml");      System.out.println("解析開始:--------------------------");      //獲取Movie元素結點集合      NodeList movies=document.getElementsByTagName("Movie");      System.out.println("共有"+movies.getLength()+"部電影");      //遍歷Movie元素結點集合      for(int i=0;i<movies.getLength();i++){        System.out.println("=====================");        System.out.println("正在解析"+(i+1)+"部電影!");        Node movie=movies.item(i);        //獲取元素結點的屬性集合        NamedNodeMap attrs=movie.getAttributes();        for(int j=0;j<attrs.getLength();j++){          Node attr=attrs.item(j);          System.out.print("屬性名為:"+attr.getNodeName()+"    ");          System.out.println("屬性值為:"+attr.getNodeValue());        }        //獲取movie元素子節點集合        NodeList childNodes=movie.getChildNodes();        for(int k=0;k<childNodes.getLength();k++){          Node child=childNodes.item(k);          if (child.getNodeType()==Document.ELEMENT_NODE) {            System.out.println("節點名:"+child.getNodeName()+"    ");            //System.out.println("節點值:"+child.getNodeValue());            System.out.println("節點值:"+child.getFirstChild().getNodeValue());          }        }        System.out.println("第"+(i+1)+"部電影解析結束");      }      System.out.println("解析結束--------------------------------");    } catch (Exception e) {      e.printStackTrace();    }

2.SAX解析

//1.創建SAXFactory對象    SAXParserFactory sParserFactory=SAXParserFactory .newInstance();    //2.拿到一個SAXParser解析對象    try {      SAXParser saxParser=sParserFactory.newSAXParser();      saxParser.parse("Movie.xml",new MyHandler() );    } catch (Exception e) {      e.printStackTrace();    }

接下來需要寫一個類去繼承DefaultHandler,然后一般要重寫里面的五個方法: 

1)startDocument(),該方法一執行表示解析開始,可以在里面去初始化對象集合

@Override  public void startDocument() throws SAXException {    System.out.println("開始解析----------------------------");    movieList=new ArrayList<>();  }

2)startEnement(),該方法一執行表示解析到了開始元素,亦即xml文件里面的Movie標簽

@Override  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {    //    if ("Movie".equals(qName)) {      movie=new Movie();      count++;      System.out.println("正在解析第"+count+"部電影!");      for (int i = 0; i < attributes.getLength(); i++) {        //拿到屬性名和屬性值        System.out.print("屬性名:"+attributes.getQName(i)+"    ");        System.out.println("屬性值:"+attributes.getValue(i));        if (attributes.getQName(i).equals("id")) {          movie.setMovieId(attributes.getValue(i));        }      }    }  }

3)characters(),在該方法里面去讀取元素的值

@Override  public void characters(char[] ch, int start, int length) throws SAXException {    value=new String(ch,start,length);    if (!value.trim().equals("")) {      System.out.println("節點值:"+value);    }  }

4)endElement(),表示解析到了一個元素的結束標簽,在該方法里面可以去 構造對象,最后并且添加到集合里去

@Override  public void endElement(String uri, String localName, String qName) throws SAXException {    if (qName.equals("year")) {      movie.setMovieYear(value);    }    if (qName.equals("type")) {      movie.setMovieType(value);    }    if (qName.equals("language")) {      movie.setMovieLanguage(value);    }    if (qName.equals("name")) {      movie.setMovieName(value);    }    //解析完一個元素時回調    if ("Movie".equals(qName)) {      movieList.add(movie);      movie=null;      System.out.println("第"+count+"部電影解析結束!");    }  }

5)endDocument(),當執行到該方法也就表示文件已經解析完畢了

@Override  public void endDocument() throws SAXException {    System.out.println("解析結束----------------------------");    System.out.println("解析結果集如下:");    for(int i=0;i<movieList.size();i++){      System.out.println(movieList.get(i).toString());      System.out.println("----------------------------------");    }  }

3.PULL解析

pull解析與其它方式不同的是,它需要將xml文件存放在資源文件res下面的xml文件夾下,解析的過程如下: 

1)首先拿到一個Pull資源解析器,有時如果通過網絡上下載xml文件的話,則需要去構造一個Pull解析器,再將流設置給pull解析器, 接下來就是一樣的,一個標簽一個標簽的去解析

//拿到一個XMLResourceParser    //XmlPullParser parser=Xml.newPullParser();    //parser.setInput(in);    XmlResourceParser xmlResourceParser=getResources().getXml(R.xml.movie);    //拿到第一個事件類型,也就是最外層的標簽    try {      int type=xmlResourceParser.getEventType();      while(type!=XmlResourceParser.END_DOCUMENT){        if (type==XmlResourceParser.START_DOCUMENT) {          System.out.println("開始解析");          movieList=new ArrayList<>();        }        if (type==XmlResourceParser.START_TAG) {          if ("Movie".equals(xmlResourceParser.getName())) {            movie=new Movie();            String id=xmlResourceParser.getAttributeValue(null, "id");            System.out.println("id:"+id);            movie.setMovieId(id);          }          if ("name".equals(xmlResourceParser.getName())) {            //System.out.println("name:"+xmlResourceParser.nextText()+"===========");            movie.setMovieName(xmlResourceParser.nextText());          }else if ("type".equals(xmlResourceParser.getName())) {            movie.setMovieType(xmlResourceParser.nextText());          }else if ("year".equals(xmlResourceParser.getName())) {            movie.setMovieYear(xmlResourceParser.nextText());          }else if ("language".equals(xmlResourceParser.getName())) {            movie.setMovieLanguage(xmlResourceParser.nextText());          }        }        if (type==XmlResourceParser.END_TAG) {          if ("Movie".equals(xmlResourceParser.getName())) {            movieList.add(movie);            movie=null;          }        }        type=xmlResourceParser.next();      }      System.out.println("解析結束");      StringBuffer sBuffer=new StringBuffer();      for (int i = 0; i < movieList.size(); i++) {        sBuffer.append(movieList.get(i).toString())        .append("/n");      }      show_tv.setText(sBuffer.toString());    } catch (Exception e) {      e.printStackTrace();    }

4.Json解析

Json解析的話需要先給出一份JSon數據,就拿下面的數據來解析吧!

private static final String JSONDATA="{name:張三,"      + "age:26,"      + "phone:[131,132],"      + "score:{"      + "語文:100,"      + "數學:90,"      + "理綜:{化學:80,物理:70,生物:80}}}";

Json解析的過程無疑就是碰到大括號,就new一個Object出來,中括號就new一個Array出來,再用一個for循環去讀取數據:

StringBuffer stringBuffer=new StringBuffer();    try {      //JSONObject jsonObject=new JSONObject(JSONDATA);      JSONTokener jsonTokener=new JSONTokener(JSONDATA);      JSONObject jsonObject=(JSONObject) jsonTokener.nextValue();      stringBuffer.append("name:"+jsonObject.getString("name")+"/n");      stringBuffer.append("aeg:"+jsonObject.getString("age")+"/n");      JSONArray phoneArray=jsonObject.getJSONArray("phone");      stringBuffer.append("phone:"+phoneArray.getString(0)                      +"  "+phoneArray.getString(1)+"/n");      JSONObject scoreJsonObject=jsonObject.getJSONObject("score");      stringBuffer.append("語文:"+scoreJsonObject.getString("語文")+"/n")      .append("數學:"+scoreJsonObject.getString("數學"));      JSONObject lizongObject=scoreJsonObject.getJSONObject("理綜");      stringBuffer.append("化學:"+lizongObject.getString("化學")+"/n")      .append("物理:"+lizongObject.getString("物理")+"/n")      .append("生物:"+lizongObject.getString("生物"));      show_tv.setText(stringBuffer.toString());    } catch (Exception e) {      e.printStackTrace();    }

5.GSON解析

GSON解析相對來說簡單一些,但也有一定的局限性,比如說,數據類的屬性字段和key值必須是一一對應的

//拿GSON去解析數據時,數據類的屬性值跟key值必須是對應的    Gson gson=new Gson();    Student student=gson.fromJson(JSONDATA, Student.class);

數據類的屬性:

public String name;public String age;public ArrayList<String> phone=new ArrayList<>();public ArrayList<Score> score=new ArrayList<>();public class Score{  public String id;  public String fenshu;}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久九九热免费视频| 亚洲女人天堂av| 夜夜躁日日躁狠狠久久88av| 欧美激情亚洲国产| 色吧影院999| 成人国产精品免费视频| 亚洲少妇激情视频| 日韩av最新在线观看| 日本国产一区二区三区| 色噜噜狠狠狠综合曰曰曰| 91在线视频成人| 国模gogo一区二区大胆私拍| 中文字幕亚洲自拍| www.亚洲男人天堂| 亚洲欧美成人一区二区在线电影| 亚洲黄页网在线观看| 国产精品综合网站| 最新日韩中文字幕| 亚洲精品一区二三区不卡| 91亚洲国产成人久久精品网站| 视频一区视频二区国产精品| 国产精品18久久久久久首页狼| 国产精品久久久久免费a∨| 欧美激情图片区| 国产91精品久| 欧美日韩午夜激情| 国产精品久久久久久久7电影| 久久久999成人| 日韩精品在线免费观看视频| 国产高清视频一区三区| 欧美巨猛xxxx猛交黑人97人| 中文字幕久久精品| 国产精品影院在线观看| 激情懂色av一区av二区av| 亚洲综合日韩在线| 亚洲va码欧洲m码| 97久久精品国产| 国产精品99久久久久久www| 欧美肥臀大乳一区二区免费视频| 色老头一区二区三区在线观看| 国产国语刺激对白av不卡| 国产69精品久久久| 欧美在线观看www| 成人国产精品久久久| 久久久av亚洲男天堂| 久久久久久国产三级电影| 一区二区三区黄色| 国产亚洲精品美女久久久久| 欧美成人免费在线观看| 国产精品最新在线观看| 国内精品400部情侣激情| 日韩一区二区欧美| 国产一区二区三区丝袜| 国产精品久久久久不卡| 97视频免费在线看| 97在线看免费观看视频在线观看| 69国产精品成人在线播放| 国产女精品视频网站免费| 中文字幕亚洲欧美在线| 庆余年2免费日韩剧观看大牛| 亚洲欧美成人在线| 日韩精品中文字幕在线| 日韩在线观看高清| 国语自产精品视频在线看一大j8| 亚洲天天在线日亚洲洲精| 亚洲精品欧美日韩专区| 亚洲第一区中文99精品| 久久久久久香蕉网| 精品国产电影一区| 国产女人18毛片水18精品| 九色精品美女在线| 欧美成人黑人xx视频免费观看| 日韩精品电影网| 精品久久国产精品| 亚洲www在线观看| 这里精品视频免费| 亚洲美女黄色片| 日韩av网站导航| 亚洲国产私拍精品国模在线观看| 一个人看的www欧美| 亚洲伊人久久大香线蕉av| 亚洲社区在线观看| 日韩av免费在线播放| 日韩在线观看免费高清| 亚洲色图第一页| 欧美性猛交99久久久久99按摩| 亚洲欧美中文日韩在线| 日本久久久久亚洲中字幕| 一区二区三区高清国产| 国产精品99蜜臀久久不卡二区| 亚洲精品ady| 久久中文精品视频| 国产精品日韩欧美大师| 亚洲一区二区国产| 91av在线免费观看| 日本高清视频一区| 国产精品一区二区久久久| 国产精品日韩欧美大师| 欧美日韩国产影院| 国产精品午夜国产小视频| 国产精品视频久久| 欧美视频免费在线| 亚洲电影成人av99爱色| 人人做人人澡人人爽欧美| 久久久av电影| 国产精品香蕉国产| 久久精品美女视频网站| 亚洲xxxxx电影| 欧美激情免费视频| 亚洲激情电影中文字幕| 欧美大荫蒂xxx| 国产精品一区二区电影| 欧美成人在线免费| 久久久成人av| 亚洲成人久久一区| 国产精品国产三级国产专播精品人| 亚洲精品电影网| 国模视频一区二区| 国产亚洲视频中文字幕视频| 久久久久久国产三级电影| 亚洲精品永久免费精品| 亚洲国产又黄又爽女人高潮的| 国产欧美一区二区三区在线| 一本色道久久综合狠狠躁篇怎么玩| 国产精品主播视频| 国产精品久久77777| 久久久久久亚洲精品中文字幕| 亚洲最大成人免费视频| 久久人人爽人人| 欧美老妇交乱视频| 亚洲在线观看视频网站| 久久视频免费观看| 成人免费激情视频| 久久久99免费视频| 日韩免费视频在线观看| 亚洲中国色老太| 日本精品性网站在线观看| 国产精品v片在线观看不卡| 日韩亚洲欧美中文高清在线| 亚洲性夜色噜噜噜7777| 日韩av不卡电影| 精品久久久免费| 日韩视频免费大全中文字幕| 成人av在线天堂| 国产精品成人免费视频| 亚洲人精选亚洲人成在线| 日韩亚洲第一页| 色在人av网站天堂精品| 亚洲欧美日韩网| 中文字幕亚洲一区在线观看| 国产一区二区丝袜| 正在播放欧美视频| 国产成人+综合亚洲+天堂| 成人免费视频网址| 国产精品国产亚洲伊人久久| 欧美激情成人在线视频| 国产在线精品成人一区二区三区| 中文字幕亚洲一区二区三区五十路| 欧美亚洲激情在线| 国产精品久久久久久久久久久久| 欧美午夜www高清视频| 亚洲第一中文字幕在线观看| 韩国精品久久久999| 91精品久久久久久久久|