我正在做一个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页面中显示数据。
答案 0 :(得分:2)
使用此示例代码
public class SAXParserDemo extends DefaultHandler {
private String currentTag = "";
private StringBuffer responseTag;
private String str;
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, name, attributes);
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);
}
}
}
答案 1 :(得分:0)
如果您正在使用SAX解析,则需要查找div
元素,并且需要跟踪父元素(您自己)并确保tag2
。您正在获取tag1
元素中的数据(字符),因为它直接包含这些字符。 tag2
元素不包含任何(非空白)字符,只包含其他元素。