(二)先看一下DOM解析XML的实际效果图,其效果跟SAX解析是一样的。
(三)工程源码框架
(1)布局文件main_xml.xml listview_xml.xml和适配器类MySimpleAdapter都和上篇文章一样,这里就不再给出代码
(2)DOMParseService.java (核心代码)
package com.laolu.parser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.util.Log;
public class DOMParserService
{
public List> getPersons(InputStream is) throws Exception
{
List> persons=new ArrayList>();
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
DocumentBuilder builder =factory.newDocumentBuilder();
Document document = builder.parse(is);
Element root =document.getDocumentElement();
NodeList personNodes=root.getElementsByTagName("person");
for(int i=0;i
{
Map person =new HashMap();
Element personElement =(Element) personNodes.item(i);
String id=personElement.getAttribute("id");
person.put("id", id);
NodeList childNodes =personElement.getChildNodes();
for(int j=0; j
{
if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE)//判断是否为元素
{
if("name".equals(childNodes.item(j).getNodeName().trim()))
{
String name=childNodes.item(j).getFirstChild().getNodeValue();
person.put("name", name);
}else if("sex".equals(childNodes.item(j).getNodeName().trim()))
{
String sex=childNodes.item(j).getFirstChild().getNodeValue();
person.put("sex", sex);
}else if("age".equals(childNodes.item(j).getNodeName().trim()))
{
String age=childNodes.item(j).getFirstChild().getNodeValue();
person.put("age", age);
}
}
}
persons.add(person);
}
is.close();
return persons;
}
}
package com.laolu.main;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.example.xml.R;
import com.laolu.adapter.MySimpleAdapter;
import com.laolu.parser.DOMParserService;
import com.laolu.parser.SAXForHandler;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class XML_ParseActivity extends Activity
{
private static final String SAX="SAX_Parse";
private static final String DOM="DOM_Parse";
private static final String PULL="Pull_Parse";
ListView listView=null;
InputStream inputStream=null;
SimpleAdapter adapter=null;
List> persons=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_xml);
listView=(ListView) findViewById(R.id.listview);
Button saxButton=(Button) findViewById(R.id.sax_btn);
Button domButton=(Button) findViewById(R.id.dom_btn);
Button pullButton=(Button) findViewById(R.id.pull_btn);
saxButton.setOnClickListener(new MyListener());
domButton.setOnClickListener(new MyListener());
pullButton.setOnClickListener(new MyListener());
//通过类装载器将XML资源加载成java能处理的IO流
inputStream = this.getClass().getClassLoader().getResourceAsStream("laolu_xml.xml");
}
public class MyListener implements OnClickListener
{
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.sax_btn:
break;
case R.id.dom_btn:
try {
updateListViewByDOM();
} catch (Exception e)
{
Log.i(DOM, "DOM Exception!!!");
}
break;
case R.id.pull_btn:
break;
}
}
}
public void updateListViewBySAX() throws Exception //SAX方式
{
SAXForHandler saxForHandler = new SAXForHandler();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
saxParser.parse(inputStream, saxForHandler);
persons = saxForHandler.getPersons();
adapter=new MySimpleAdapter(this, persons, R.layout.listview_xml,
new String[]{"id","name","sex","age"}, new int[]{R.id.id,R.id.name,R.id.sex,R.id.age});
listView.setAdapter(adapter);
inputStream.close();
}
public void updateListViewByDOM() throws Exception //DOM方式
{
DOMParserService domParserService=new DOMParserService();
persons=domParserService.getPersons(inputStream);
adapter= new MySimpleAdapter(this, persons, R.layout.listview_xml,
new String[]{"id","name","sex","age"}, new int[]{R.id.id,R.id.name,R.id.sex,R.id.age});
listView.setAdapter(adapter);
inputStream.close();
}
}
http://www.dengb.com/ASPjc/438066.htmlwww.dengb.comtruehttp://www.dengb.com/ASPjc/438066.htmlTechArticle------------------------------------------------------------------------------------------------------ (1)元素:Element 元素是XML的基本构件。元素的子节点可以是...