安卓系统中对xml文件解析的3种方式总结

  

  

xml是数据传输的一种格式,Android中的布局文件,设置文件等都采用它来表示.Android中对xml文件的解析也有多种方式、下面介绍常用的3种方式:Dom、SAX和dom4j。下面话不多说了,来一起看看详细的介绍吧。

  

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 "独立="不" & # 63;比;   & lt;书出版社="骏马”在   & lt;书名祝辞如何成功& lt;/书名比;   & lt;作者祝辞uniapp      

  

Dom解析通过文档类将整个xml文件一次读入内存,然后通过操作文档实例的属性实现对xml文件中元素的增删改查,具体代码如下:

  

  

SAX对xml文件采用边读边解析的方式,就像我们用眼睛读文章一样,一行一行的进行。相比Dom方式产生的瞬时内存峰值,SAX对内存的消耗比较平稳。它通过解析类提供对外接口,具体实现:

        公开课SaxDemo {   @Test   公共void main()抛出ParserConfigurationException SAXException, IOException {//工厂类实例   SAXParserFactory fac=SAXParserFactory.newInstance ();//创建解析器   SAXParser解析器=fac.newSAXParser ();//解析文档   XMLReader读者=parser.getXMLReader ();   读者。setContentHandler(新MyDefultHandle ());   reader.parse (“。/app/src/main/java/测试/DTD.xml”);      }   }      继承DefaultHandler类MyDefultHandle {      @Override   公共空间startDocument()抛出SAXException {   super.startDocument ();      System.out.println(“文档开始”);   }      @Override   公共空间endDocument()抛出SAXException {   super.endDocument ();   System.out.println(“文档结束”);   }      私人布尔isPrice=false;   @Override   公共空间startElement (String localName uri字符串,字符串qName,属性属性)抛出SAXException {   超级。qName, startElement (uri, localName属性);   system . out。println(“元素开始:“+ qName);      }      @Override   公共空间endElement (String localName uri字符串,字符串qName)抛出SAXException {   超级。endElement (uri, localName, qName);      如果(“售价”.equals (qName)) {   isPrice=false;   }   system . out。println(“元素结束:“+ qName);      }      @Override   公共空白字符(char [] ch, int, int长度)抛出SAXException {   超级。字符(ch,开始,长度);   如果(isPrice) {   system . out。println(“内容:“+新字符串(ch、启动、长度));   }   }   }      

  

Dom4j解析是第三开源库给出的解析方式,结合了Dom和SAX双方的优点,对xml文件逐步读入内存,并且可以采用面向对象的方式访问节点。代码如下:

     /* *   *读取属性值   * */公共空间readAttr()抛出DocumentException {   文档doc=getDocument ();   List列表=doc.getRootElement () . elements(“书”);   for (int i=0;我& lt;list.size ();我+ +){   元素el=(元素)list.get(我);   属性att=el.attribute(“出版社”);   system . out。打印(“结果:“+ att.getName att.getValue () + ());   }   }/* *   *读取节点   * */公共空间read()抛出DocumentException {/* *   *不能越级获取值   * */文档doc=getDocument ();   org.dom4j。元素el=doc.getRootElement ();   元素firstEl=el.element(“书”);   元素firstBookEl=firstEl.element(“书名”);      字符串名称=firstBookEl.getText ();   system . out。println(“书名:“+名字);   }      公共空间更新()抛出DocumentException, IOException {   文档doc=getDocument ();   List列表=doc.getRootElement () . elements(“书”);   元素元素=list.get (0);   元素priceEl=element.element(“售价”);   priceEl.setText(“888元”);   XMLWriter作家=new XMLWriter(新FileOutputStream (“。/app/src/main/java/测试/Dom4j3.xml "));   writer.write (doc);   }/* *   *删除节点   * */公共空间deletePrice()抛出异常{   SAXReader读者=new SAXReader ();   文档doc=reader.read (”。/app/src/main/java/测试/Dom4j1.xml”);   元素el=(元素)doc.getRootElement . elements(“书”). get () (1);   元素elPrice=(元素)el.elements(“售价”). get (1);   elPrice.getParent () .remove (elPrice);   XMLWriter作家=new XMLWriter(新FileOutputStream (“。/app/src/main/java/测试/Dom4j2.xml "));   writer.write (doc);   writer.close ();   }/* *   *增加节点   * */公共空间addEl()抛出DocumentException, IOException {   文档doc=getDocument ();   元素el=(元素)doc.getRootElement . elements(“书”). get () (1);   el.addElement(“售价”). settext(“6.66元”);   XMLWriter作家=new XMLWriter(新FileOutputStream (“。/app/src/main/java/测试/Dom4j1.xml "));   writer.write (doc);   writer.close ();   }      私人文档getDocument()抛出DocumentException {   SAXReader读者=new SAXReader ();   返回reader.read (”。/app/src/main/java/测试/DTD.xml”);   }

安卓系统中对xml文件解析的3种方式总结