这是正确的程序,现在运行良好:) 谢谢先生
我是安卓新手。我有一个字符串,其中包含服务器返回给我的 XML 格式数据(它是一个 XML 文档)。我想在 Android 中解析它,XmlResourceParser
但它只接受存储在您设备上的 xml 文档,例如:
XmlResourceParser xmlResourceParser = getResources().getXml(
R.xml.new_xml);
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<ItemInfo>" + "<Status>Success</Status>"
+ "<Reason></Reason>" + "<IsMore>yes</IsMore>"
+ "<ItemList>"
+ "<Item Name=\"Ahmad\" Level=\"1\" UserId=\"5\"></Item >"
+ "<Item Name=\"Ahmad\" Level=\"1\" UserId=\"5\"></Item >"
+ "<Item Name=\"Ahmad\" Level=\"1\"UserId=\"5\"></Item >"
+ "</ItemList>" + "</ItemInfo>";
我希望 XmlResourceParser 解析我的这个字符串。但是如何让它接受这个字符串作为一个 xml 文档。使用以下方法但出现异常
private XmlPullParser xmlResourceParser;
xml = xml.replaceAll("\t", "");
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
xmlResourceParser = factory.newPullParser();
xmlResourceParser.setInput(new StringReader(xml));
} catch (Exception ex) {
ex.printStackTrace();
}
int eventType = -1;
while (eventType != XmlResourceParser.END_DOCUMENT) {
try {
if (eventType == XmlResourceParser.START_TAG) {
String strNode = xmlResourceParser.getName();
if (strNode.equalsIgnoreCase("Status")) {
do {
xmlResourceParser.next();
} while (eventType == XmlResourceParser.TEXT);
if (!xmlResourceParser.getText().equalsIgnoreCase(
"success")) {
do {
eventType = xmlResourceParser.next();
} while (eventType != XmlResourceParser.START_TAG);
if (xmlResourceParser.getName().equalsIgnoreCase(
"reason"))
eventType = xmlResourceParser.next();
todoItems.add(xmlResourceParser.getText());
return todoItems;
}
}
if (strNode.equals("IsMore")) {
do {
xmlResourceParser.next();
} while (eventType == XmlResourceParser.TEXT);
if (xmlResourceParser.getText().equalsIgnoreCase("yes"))
todoItems.add("nextPage");// if nextPage then there
// is one more page
// otherwise no next
// page
else
todoItems.add("lastPage");// show user pervious
// button instead of
// next button
}
if (strNode.equals("Item")) {
todoItems.add(xmlResourceParser.getAttributeValue(null,
"Name"));
todoItems.add(xmlResourceParser.getAttributeValue(null,
"Level"));
todoItems.add(xmlResourceParser.getAttributeValue(null,
"UserId"));
}
}
eventType = xmlResourceParser.next();
} catch (XmlPullParserException xmlPullExp) {
xmlPullExp.printStackTrace();
todoItems.add("XmlPullParserException");
} catch (IOException ioExp) {
ioExp.printStackTrace();
todoItems.add("IOException");
} catch (Exception exp) {
exp.printStackTrace();
todoItems.add("Exception");
}
}
return todoItems;
}