xml是数据传输的一种格式,Android中的布局文件,设置文件等都采用它来表示.Android中对xml文件的解析也有多种方式、下面介绍常用的3种方式:Dom、SAX和dom4j。下面话不多说了,来一起看看详细的介绍吧。
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 "独立="不" & # 63;比; & lt;书出版社="骏马”在 & lt;书名祝辞如何成功& lt;/书名比; & lt;作者祝辞uniapp作者比; & lt;售价在666 & lt;/售价比; & lt;/书比; & lt;书比; & lt;书名祝辞如何成功1 & lt;/书名比; & lt;作者祝辞uniapp作者比; & lt;售价在1991 & lt;/售价比; & lt;/书比; & lt;/书架在
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种方式总结