Android; парсинг XML в Textview
Я хочу проанализировать XML, который имеет данные, дифференцированные на основе идентификатора (можно сказать в табличной форме), и показать его в Textviews (по одному идентификатору за раз). Вы можете помочь мне в этом отношении?? Желательно в XML PullParser, как это рекомендует Android
Я хочу, чтобы значения XML помещались в Textviews по одному на основе их идентификаторов.
<myXmlStarts>
<Id>1</id>
<EnglishData>"this is 1st English line"</EnglishData>
<UrduData>"this is 1st Urdu line"</UrduData>
</myXmlStarts>
<myXmlStarts>
<Id>2</id>
<EnglishData>"this is 2nd English line"</EnglishData>
<UrduData>"this is 2nd Urdu line"</UrduData>
</myXmlStarts>
1 ответ
Вы можете сделать что-то вроде
public class TestClass {
static String text;
public static void main (String args[])
throws XmlPullParserException, IOException
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
List<Model> listData = new ArrayList<Model>();
Model model = null;
String xmlString = "<myXmlStarts><Id>1</Id><EnglishData>this is 1st English line</EnglishData><UrduData>this is 1st Urdu line</UrduData></myXmlStarts><myXmlStarts><Id>2</Id><EnglishData>this is 2nd English line</EnglishData><UrduData>this is 2nd Urdu line</UrduData></myXmlStarts>";
xpp.setInput(new StringReader (xmlString));
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = xpp.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("myXmlStarts")) {
System.out.println("<myXmlStarts>");
model = new Model();
}
break;
case XmlPullParser.TEXT:
text = xpp.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("myXmlStarts")) {
System.out.println("</myXmlStarts>");
listData.add(model);
}
if (tagname.equalsIgnoreCase("Id")) {
System.out.println("Id is : " +text);
model.setId(text);
}
if (tagname.equalsIgnoreCase("EnglishData")) {
System.out.println("english data is : " +text);
model.setEngData(text);
}
if (tagname.equalsIgnoreCase("UrduData")) {
System.out.println("urdudata is : " +text);
model.setUrduData(text);
}
// ....add what are the tags you want
default:
break;
}
eventType = xpp.next();
} // end of while loop
System.out.println("Array list size : " +listData.size());
int listSize = listData.size();
for (int i = 0; i < listSize; i++) {
System.out.println("Id : " + listData.get(i).getId());
System.out.println("Id : " + listData.get(i).getEngData());
System.out.println("Id : " + listData.get(i).getUrduData());
}
}
}
Model.class
public class Model {
String id, engData, urduData;
public String getEngData() {
return engData;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setEngData(String engData) {
this.engData = engData;
}
public String getUrduData() {
return urduData;
}
public void setUrduData(String urduData) {
this.urduData = urduData;
}
}
Выход:
<myXmlStarts>
Id is : 1
english data is : this is 1st English line
urdudata is : this is 1st Urdu line
</myXmlStarts>
<myXmlStarts>
Id is : 2
english data is : this is 2nd English line
urdudata is : this is 2nd Urdu line
</myXmlStarts>
Array list size : 2
Id : 1
Id : this is 1st English line
Id : this is 1st Urdu line
Id : 2
Id : this is 2nd English line
Id : this is 2nd Urdu line
Что я сделал,
- Создана модель для идентификатора, английских данных, UruduData.
- Объявлен
ArraList
с параметром какModel
, - Всякий раз, когда он видит
myXmlStarts
как START_TAG, он просто инициализирует класс модели. (модель = новая модель ();) - Вы просто добавляете в модель, когда она находит END_TAG как
Id
,EnglishData
так далее.. - Но, если он находит END_TAG как
myXmlStarts
просто добавляет, чтоArrayList
(listData.add(model);) и то же самое происходит до конца документа.
Теперь у вас есть все данные в ArrayList
, Просто добавьте эти значения в textView
, Я только что закончил твою половинную работу. Отдыхай, попробуй. Удачи.
НОТА:
У вас есть ошибка в ваших тегах xml.
+ Изменить
<Id>1</id>
в
<Id>1</Id> <-- closing and opening tag name should be same. Not `i` once and 'I' later. Good luck.