加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析

发布时间:2020-12-16 05:43:37 所属栏目:百科 来源:网络整理
导读:XML解析 安卓有三种xml解析器,SAX(Simple API Xml),DoM(Document Object Xml),以及Android推荐的Pull。 SAX 是事件驱动型XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(elem

XML解析

安卓有三种xml解析器,SAX(Simple API Xml),DoM(Document Object Xml),以及Android推荐的Pull。

SAX

是事件驱动型XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。缺点是只适合做文档的读取,不适合做文档的增删改查

DOM

即对象文档模型,基于树形结构,递归遍历节点。它通常载入整个XML,以及树形结构到内存,所以查找更新数据效率高,但对大文档小内存的场景时,效果不好。

优点对文档增删改查比较方便,缺点占用内存比较大

PULL

原理与SAX相似,比SAX灵活,比DOM占内存小。官方推荐API

PullBookParser.java代码如下:

[java] view plain copy
  1. packagecom.scott.xml.parser;
  2. importjava.io.InputStream;
  3. importjava.io.StringWriter;
  4. importjava.util.ArrayList;
  5. importjava.util.List;
  6. importorg.xmlpull.v1.XmlPullParser;
  7. importorg.xmlpull.v1.XmlSerializer;
  8. importandroid.util.Xml;
  9. importcom.scott.xml.model.Book;
  10. publicclassPullBookParserimplementsBookParser{
  11. @Override
  12. publicList<Book>parse(InputStreamis)throwsException{
  13. List<Book>books=null;
  14. Bookbook=null;
  15. XmlPullParserparser=Xml.newPullParser();
  16. parser.setInput(is,"UTF-8");
  17. inteventType=parser.getEventType();
  18. while(eventType!=XmlPullParser.END_DOCUMENT){
  19. switch(eventType){
  20. caseXmlPullParser.START_DOCUMENT:
  21. books=newArrayList<Book>();
  22. break;
  23. caseXmlPullParser.START_TAG:
  24. if(parser.getName().equals("book")){
  25. book=newBook();
  26. }elseif(parser.getName().equals("id")){
  27. eventType=parser.next();
  28. book.setId(Integer.parseInt(parser.getText()));
  29. }if(parser.getName().equals("name")){
  30. eventType=parser.next();
  31. book.setName(parser.getText());
  32. if(parser.getName().equals("price")){
  33. book.setPrice(Float.parseFloat(parser.getText()));
  34. }
  35. caseXmlPullParser.END_TAG:
  36. books.add(book);
  37. book=returnbooks;
  38. @Override
  39. publicStringserialize(List<Book>books)throwsException{
  40. XmlSerializerserializer=Xml.newSerializer();//由android.util.Xml创建一个XmlSerializer实例
  41. StringWriterwriter=newStringWriter();
  42. serializer.setOutput(writer);//设置输出方向为writer
  43. serializer.startDocument("UTF-8",true);
  44. serializer.startTag("","books");
  45. for(Bookbook:books){
  46. "book");
  47. serializer.attribute("","id",book.getId()+"");
  48. serializer.startTag("","name");
  49. serializer.text(book.getName());
  50. serializer.endTag("","price");
  51. serializer.text(book.getPrice()+"");
  52. "book");
  53. }
  54. "books");
  55. serializer.endDocument();
  56. returnwriter.toString();
  57. }

然后再对MainActivity做以下更改:

copy

    readBtn.setOnClickListener(newView.OnClickListener(){
  1. voidonClick(Viewv){
  2. try{
  3. InputStreamis=getAssets().open("books.xml");
  4. parser=newPullBookParser();
  5. books=parser.parse(is);
  6. Log.i(TAG,book.toString());
  7. catch(Exceptione){
  8. Log.e(TAG,e.getMessage());
  9. });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读