在 android 应用程序中,我要解析一个 xml 页面。xml 页面中的数据是下面这种格式:
<root>
<tag1>data</tag1>
<tag2>
<div>data1</div><div>data2</div>
</tag2>
</root>
通过 sax 解析来获取数据:
if (localName.equalsIgnoreCase("tag1"))
if (localName.equalsIgnoreCase("tag2"))
但是我不能从tag2中得到任何数据,能从tag1中获得值。我想获取所有数据包括div标签
然后把数据显示在html页面上。
使用下面的代码,应该能达到你要的功能。
currentTag = localName;
if ("tag1".equalsIgnoreCase(localName)) {
responseTag = new StringBuffer();
}else if ("tag2".equalsIgnoreCase(localName)) {
responseTag = new StringBuffer();
}else if ("div".equalsIgnoreCase(localName)) {
responseTag = new StringBuffer();
}
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
super.endElement(uri, localName, name);
String responseValue = responseTag.toString().trim();
if ("tag1".equalsIgnoreCase(localName)) {
Log.v("TAG", "Tag 1 value "+responseValue);
}else if ("tag2".equalsIgnoreCase(localName)) {
Log.v("TAG", "Tag 2 value "+responseValue);
}else if ("div".equalsIgnoreCase(localName)) {
Log.v("TAG", "div value "+responseValue);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
str = new String(ch, start, length);
if ("tag1".equalsIgnoreCase(currentTag)) {
responseTag.append(str);
}else if ("tag2".equalsIgnoreCase(currentTag)) {
responseTag.append(str);
}else if ("div".equalsIgnoreCase(currentTag)) {
responseTag.append(str);
}
}
}
XmlPullParser parser = Xml.newPullParser();
parser.setInput(xml, "UTF-8");
int event = parser.getEventType();
while(event != XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
//这是xml中的文档头<?xml version="1.0" encoding="UTF-8" standalone="no"?>这部分 适合做初始化工作
break;
case XmlPullParser.START_TAG:
//这里是xml的元素节点
if("KEY_CONFIG".equals(parser.getName())){
//这里做你需要做的事情
}else if("其他".equals(parser.getName())){
//获得元素节点下的文本节点 使用parser.nextText();
}else if("其他".equals(parser.getName())){
//以此类推 }
break;
case XmlPullParser.END_TAG:
break;
}
event = parser.next();
}