Ce programme est correct et maintenant fonctionne bien :) merci MonsieurCréer xml à la volée à partir d'une chaîne
Je suis nouveau à Android. J'ai une chaîne qui contient des données de format XML (c'est un document XML) que les serveurs me renvoie. Je veux analyser dans Android avec XmlResourceParser
mais il accepte uniquement les documents XML qui sont stockés sur votre appareil: par exemple
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>";
Je veux XmlResourceParser pour analyser mon cette chaîne. mais comment faire accepter cette chaîne comme un document XML. en utilisant la méthode suivante, mais la mise en caisse exception
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;
}
http://apachejava.blogspot.com/2010/12/saxbuilder -alternative-xmlpullparser.html # comments –