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程序设计有所帮助。