¿Cómo puedo analizar XML android?
Tengo problemas para analizar mi XML, he intentado muchas cosas.
Tengo xml como este.
- ArrayIndexOutOfBoundsException en el KXmlParser de android
- Cómo crear un AttributeSet en Android?
- ¿Cómo extracto el texto de un xml anidado usando xmlpullparser en android?
- Analizador XML personalizado de Android falla al resolver el espacio de nombres android
- Xml extraer elementos del analizador xml
<question id="1" text="Zodiac Sign" > <option id="1" >Aries</option> <option id="2" >Taurus</option> <option id="3" >Gemini</option> <option id="4" >Cancer</option> <option id="5" >Leo</option> <option id="6" >Virgo</option> <option id="7" >Libra</option> <option id="8" >Scarpio</option> <option id="9" >Sagitarius</option> <option id="10" >Capricorn</option> <option id="11" >Acqauarius</option> </question><question id="2" text="Home Town" > </question><question id="3" text="Current Locaion" > </question><question id="4" text="Nationality" ></question> <question id="5" text="Height" ></question> <question id="6" text="Build(optional)" > <option id="13" >Slim</option> <option id="14" >Athletic</option> <option id="15" >Few Pounds Extra</option> <option id="16" >Obese</option> </question><question id="7" text="Hair Color" > </question><question id="8" text="Color Of Eyes" > <option id="23" >Black</option> <option id="24" >Brown</option> <option id="25" >Blue</option> </question><question id="9" text="Smoking Habits" > </question>
Necesito hacer preguntas y quiero guardarlas en una matriz y luego hay algunas preguntas que tienen opciones como etiqueta secundaria, quiero agregar esas opciones en otra matriz con la referencia a esa identificación de la pregunta.
¿Cómo puedo realmente analizar este xml.?
He estado intentando hacer esto usando XMLPullParser
Aquí está mi código, pero no funciona.
StringBuilder sb = new StringBuilder(); int depth = 1; while (depth != 0) { switch (parser.next()) { case XmlPullParser.END_TAG: depth--; if (depth > 0) { sb.append("</" + parser.getName() + ">"); } break; case XmlPullParser.START_TAG: depth++; StringBuilder attrs = new StringBuilder(); for (int i = 0; i < parser.getAttributeCount(); i++) { attrs.append(parser.getAttributeName(i) + "=\"" + parser.getAttributeValue(i) + "\" "); } sb.append("<" + parser.getName() + " " + attrs.toString() + ">"); break; default: sb.append(parser.getText()); break; } } payload = sb.toString();
- XmlPullParser - Analizar etiqueta analizada
- Android org.xmlpull.v1.XmlPullParserException al analizar XML
- Error desconocido en xpath (utilizando xmlpullparser)
- XmlPullParserException al analizar un archivo de recursos en Android
- XmlPullParserException sólo en ICS
- XmlPullParser getAttributeValue devuelve null
- Parser SAX vs analizador XMLPull
- Net.sqlcipher.database.SQLiteException: no es un error:
He construido mi propio parser para analizar este xml.
Aquí está el código
public class ProfileHome extends Activity { public String id=""; public String text=""; public ArrayList<String>option = new ArrayList<String>(); public String singleoption=""; List<Questions> q; private Questions question = new Questions(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.profile_home); String payload = "<question id=\"1\" text=\"Zodiac Sign\" ><option id=\"1\" >Aries</option><option id=\"2\" >Taurus</option><option id=\"3\" >Gemini</option><option id=\"4\" >Cancer</option><option id=\"5\" >Leo</option><option id=\"6\" >Virgo</option><option id=\"7\" >Libra</option><option id=\"8\" >Scarpio</option><option id=\"9\" >Sagitarius</option><option id=\"10\" >Capricorn</option><option id=\"11\" >Acqauarius</option></question><question id=\"2\" text=\"Home Town\" ></question><question id=\"3\" text=\"Current Locaion\" ></question><question id=\"4\" text=\"Nationality\" ></question><question id=\"5\" text=\"Height\" ></question><question id=\"6\" text=\"Build(optional)\" ><option id=\"13\" >Slim</option><option id=\"14\" >Athletic</option><option id=\"15\" >Few Pounds Extra</option><option id=\"16\" >Obese</option></question><question id=\"7\" text=\"Hair Color\" ></question><question id=\"8\" text=\"Color Of Eyes\" ><option id=\"23\" >Black</option><option id=\"24\" >Brown</option><option id=\"25\" >Blue</option></question><question id=\"9\" text=\"Smoking Habits\" ></question>"; q = new ArrayList<Questions>(); if(payload.contains("question")) { for(int i=0;i<payload.length();i++) { Questions ques = new Questions(); // check if question has come if(payload.substring(i, i+8).equals("question")) { i=i+9; // check for the id, text and options for(int k=i;k<payload.length();k++) { if(payload.substring(k, k+9).equals("/question")) { q.add(ques); k=k+9; break; }else if(payload.substring(k, k+4).equals("id=\"")) { //get id for(int j=k+4;j<payload.length();j++) { if(payload.substring(j, j+1).equals("\"")) { ques.setId(id); id=""; k=j+1; break; }else { id= id + payload.substring(j, j+1); } } //check for text }else if(payload.substring(k, k+6).equals("text=\"")) { for(int j=k+6;j<payload.length();j++) { if(payload.substring(j, j+1).equals("\"")) { ques.setText(text); id=""; k=j+1; text=""; break; }else { text= text + payload.substring(j, j+1); } } //check for options }else if(payload.substring(k, k+11).equals("option id=\"")) { for(int l=k;l<payload.length();l++) { if(payload.substring(k, k+11).equals("</question>")) { ques.setOptions(option); q.add(ques); k=k+11; break; } //now get all options and their id's for(int j=k+11;j<payload.length();j++) { //get id and text if(payload.substring(j, j+9).equals("</option>")) { option.add(singleoption); singleoption=""; k=j+9; break; }else{ singleoption = singleoption +payload.substring(j,j+1); } } } } } } } } for(int i=0;i<q.size();i++) { q.get(i).getText(); q.get(i).getId(); q.get(i).getOptions().toString(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.profile_home, menu); return true; } }
- Cuadro de diálogo GUI de reconocimiento de voz personalizado de Android
- ¿Cómo crear tabla de clasificación semanal con Google Play?