html读取android xml文件,Android开发使用Dom从网络端解析xml文件

该博客介绍了一个程序,实现从网络端解析xml文件,展示在列表并点击进入相关页面。创建XMLParser类实现http请求和节点获取,创建AndroidXMLParsingActivity继承ListActivity定义节点,最后实现SingleMenuItemActivity用于点击进入新页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0fa82dd56713d88ca2e3c2d2f468b531.png

类型:文本编辑大小:1.2M语言:英文 评分:5.0

标签:

立即下载

本程序实现了从网络端解析xml文件,展示在列表,并实现点击进入相关页面。

f9dd34167e2b2706d2a07b6adc5546fb.png

e485ac457da3865ae9dbcd4af22026cb.png

首先我们创建一个类,用来实现http请求和xml文件节点的获取public class XMLParser {

// constructor

public XMLParser() {

}

/**

* Getting XML from URL making HTTP request

* @param url string

* */

public String getXmlFromUrl(String url) {

String xml = null;

try {

// defaultHttpClient

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);

HttpEntity httpEntity = httpResponse.getEntity();

xml = EntityUtils.toString(httpEntity,"utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// return XML

return xml;

}

/**

* Getting XML DOM element

* @param XML string

* */

public Document getDomElement(String xml){

Document doc = null;

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

try {

DocumentBuilder db = dbf.newDocumentBuilder();

InputSource is = new InputSource();

is.setCharacterStream(new StringReader(xml));

doc = db.parse(is);

} catch (ParserConfigurationException e) {

Log.e("Error: ", e.getMessage());

return null;

} catch (SAXException e) {

Log.e("Error: ", e.getMessage());

return null;

} catch (IOException e) {

Log.e("Error: ", e.getMessage());

return null;

}

return doc;

}

/** Getting node value

* @param elem element

*/

public final String getElementValue( Node elem ) {

Node child;

if( elem != null){

if (elem.hasChildNodes()){

for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){

if( child.getNodeType() == Node.TEXT_NODE ){

return child.getNodeValue();

}

}

}

}

return "";

}

/**

* Getting node value

* @param Element node

* @param key string

* */

public String getValue(Element item, String str) {

NodeList n = item.getElementsByTagName(str);

return this.getElementValue(n.item(0));

}

}

然后我们创建一个Activity继承与ListActivity,在这个Activity中定义一些节点。public class AndroidXMLParsingActivity extends ListActivity {

// All static variables

static final String URL = "http://10.0.2.2/biyeshejidata/menu.xml";

// XML node keys

static final String KEY_ITEM = "item"; // parent node

static final String KEY_ID = "id";

static final String KEY_NAME = "name";

static final String KEY_COST = "cost";

static final String KEY_DESC = "description";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ArrayList menuItems = new ArrayList();

XMLParser parser = new XMLParser();

String xml = parser.getXmlFromUrl(URL); // getting XML

Document doc = parser.getDomElement(xml); // getting DOM element

NodeList nl = doc.getElementsByTagName(KEY_ITEM);

// looping through all item nodes for (int i = 0; i < nl.getLength(); i++) {

// creating new HashMap

HashMapmap = new HashMap();

Element e = (Element) nl.item(i);

// adding each child node to HashMap key => value

map.put(KEY_ID, parser.getValue(e, KEY_ID));

map.put(KEY_NAME, parser.getValue(e, KEY_NAME));

map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST));

map.put(KEY_DESC, parser.getValue(e, KEY_DESC));

// adding HashList to ArrayList

menuItems.add(map);

}

// Adding menuItems to ListView

ListAdapter adapter = new SimpleAdapter(this, menuItems,

R.layout.list_item,

new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {

R.id.name, R.id.desciption, R.id.cost });

setListAdapter(adapter);

// selecting single ListView item

ListView lv = getListView();

lv.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int position, long id) {

// getting values from selected ListItem

String name = ((TextView) view.findViewById(R.id.name)).getText().toString();

String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();

String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();

// Starting new intent

Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);

in.putExtra(KEY_NAME, name);

in.putExtra(KEY_COST, cost);

in.putExtra(KEY_DESC, description);

startActivity(in);

}

});

}

}

最后实现点击进入一个新的页面的Activity。public class SingleMenuItemActivity extends Activity {

// XML node keys

static final String KEY_NAME = "name";

static final String KEY_COST = "cost";

static final String KEY_DESC = "description";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.single_list_item);

// getting intent data

Intent in = getIntent();

// Get XML values from previous intent

String name = in.getStringExtra(KEY_NAME);

String cost = in.getStringExtra(KEY_COST);

String description = in.getStringExtra(KEY_DESC);

// Displaying all values on the screen

TextView lblName = (TextView) findViewById(R.id.name_label);

TextView lblCost = (TextView) findViewById(R.id.cost_label);

TextView lblDesc = (TextView) findViewById(R.id.description_label);

lblName.setText(name);

lblCost.setText(cost);

lblDesc.setText(description);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值