Android开发之DOM解析xml文件的方法
本文实例讲述了Android中DOM解析xml文件的方法。分享给大家供大家参考,具体如下:
一、在assets文件中写xml文件
<?xmlversion="1.0"encoding="UTF-8"?> <persons> <personid="23"> <name>李明</name> <age>30</age> </person> <personid="20"> <name>李向梅</name> <age>25</age> </person> </persons>
二、在service中写一个DOM解析的操作
packagecom.example.service; importjava.io.InputStream; importjava.util.ArrayList; importjava.util.List; importjavax.xml.parsers.DocumentBuilder; importjavax.xml.parsers.DocumentBuilderFactory; importorg.w3c.dom.Document; importorg.w3c.dom.Element; importorg.w3c.dom.Node; importorg.w3c.dom.NodeList; importcom.example.domain.Person; publicclassXMLDomService{ publicList<Person>parseXML(InputStreamis){ List<Person>list=newArrayList<Person>(); //创建DOM工厂对象 DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); try{ //DocumentBuilder对象 DocumentBuilderbuilder=factory.newDocumentBuilder(); //获取文档对象 Documentdocument=builder.parse(is); //获取文档对象的root Elementroot=document.getDocumentElement(); //获取persons根节点中所有的person节点对象 NodeListpersonNodes=root.getElementsByTagName("person"); //遍历所有的person节点 for(inti=0;i<personNodes.getLength();i++){ Personperson=newPerson(); //根据item(index)获取该索引对应的节点对象 ElementpersonNode=(Element)personNodes.item(i);//具体的person节点 //设置id属性值 person.setId(Integer.parseInt(personNode.getAttribute("id"))); //获取该节点下面的所有字节点 NodeListpersonChildNodes=personNode.getChildNodes(); //遍历person的字节点 for(intindex=0;index<personChildNodes.getLength();index++){ //获取子节点 Nodenode=personChildNodes.item(index); //判断node节点是否是元素节点 if(node.getNodeType()==Node.ELEMENT_NODE){ //把节点转换成元素节点 Elementelement=(Element)node; //判断元素节点是否是name元素节点 if("name".equals(element.getNodeName())){ person.setName(element.getFirstChild() .getNodeValue()); }elseif("age".equals(element.getNodeName())){//判断是否是age节点 person.setAge(newShort(element.getFirstChild().getNodeValue())); } } } //把person对象加入到集合中 list.add(person); } //关闭输入流 is.close(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnlist; } }
三、在Activity中显示操作
packagecom.example.lession03_xml; importjava.io.InputStream; importjava.util.List; importjavax.xml.parsers.SAXParser; importjavax.xml.parsers.SAXParserFactory; importcom.example.domain.Person; importcom.example.service.XMLContentHandler; importcom.example.service.XMLDomService; importandroid.os.Bundle; importandroid.app.Activity; importandroid.view.Menu; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.view.inputmethod.InputBinding; importandroid.widget.Button; importandroid.widget.Toast; publicclassXmlActivityextendsActivity{ //声明组件 publicButtonbtn_sax,btn_dom,btn_pull; publicXMLDomServicexmlDomService; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //设置显示的视图 setContentView(R.layout.activity_xml); xmlDomService=newXMLDomService(); //根据id获取组件 btn_sax=(Button)findViewById(R.id.btn_sax); btn_dom=(Button)findViewById(R.id.btn_dom); btn_pull=(Button)findViewById(R.id.btn_pull); //为按钮注册事件 btn_sax.setOnClickListener(newMyOnclickListener()); btn_dom.setOnClickListener(newMyOnclickListener()); btn_pull.setOnClickListener(newMyOnclickListener()); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.xml,menu); returntrue; } //匿名类 classMyOnclickListenerimplementsOnClickListener{ @Override publicvoidonClick(Viewv){ intid=v.getId(); switch(id){ caseR.id.btn_sax: Toast.makeText(XmlActivity.this,"采用SAX解析",Toast.LENGTH_LONG).show(); try{ //SAX解析的工厂对象 SAXParserFactoryfactory=SAXParserFactory.newInstance(); //得到sax的解析器 SAXParsersaxParser=factory.newSAXParser(); //创建handler对象 XMLContentHandlerhandlerService=newXMLContentHandler(); InputStreamis=getAssets().open("csdn.xml"); //直接解析 saxParser.parse(is,handlerService); //通过handlerService对象获取 Toast.makeText(XmlActivity.this,"----"+handlerService,Toast.LENGTH_LONG).show(); }catch(Exceptione){ e.printStackTrace(); } break; caseR.id.btn_dom: InputStreamis=null; try{ //获取读取文件的输入流对象 is=getAssets().open("csdn.xml"); //采用dom解析 List<Person>persons=xmlDomService.parseXML(is); //简单测试 //Toast.makeText(XmlActivity.this,""+persons.get(0).getName(),Toast.LENGTH_LONG).show(); Toast.makeText(XmlActivity.this,"采用DOM解析"+persons.get(0).getName(),Toast.LENGTH_LONG).show(); }catch(Exceptione){ e.printStackTrace(); } break; caseR.id.btn_pull: Toast.makeText(XmlActivity.this,"采用PULL解析",Toast.LENGTH_LONG).show(); break; default: break; } } } }
希望本文所述对大家Android程序设计有所帮助。