بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
نحوه پردازش فایل xml
پردازش فایل xml
package app.test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Test extends Activity {
XMLUser aUser;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String xml = "<?xml version=\"1.0\"?>\n" + "<user>\n"
+ "<user-id>1</user-id>\n" + "<username>a</username>\n"
+ "<firstname>B</firstname>\n"
+ "<lastname>C</lastname>\n" + "</user>\n";
SAXParserFactory aSAXParserFactory = SAXParserFactory.newInstance();
try {
SAXParser aSAXParser = aSAXParserFactory.newSAXParser();
XMLReader anXMLReader = aSAXParser.getXMLReader();
UserXMLHandler aUserXMLHandler = new UserXMLHandler();
anXMLReader.setContentHandler(aUserXMLHandler);
anXMLReader.parse(new InputSource(new ByteArrayInputStream(xml.getBytes())));
} catch (Exception e) {
e.printStackTrace();
}
}
class UserXMLHandler extends DefaultHandler {
static final int NONE = 0;
static final int ID = 1;
static final int FIRSTNAME = 2;
static final int LASTNAME = 3;
int state = NONE;
static final String ID_ELEMENT = "user-id";
static final String FIRSTNAME_ELEMENT = "firstname";
static final String LASTNAME_ELEMENT = "lsatname";
@Override
public void startDocument() throws SAXException {
Log.v("SimpleXMLParser", "startDocument");
aUser = new XMLUser();
}
@Override
public void endDocument() throws SAXException {
Log.v("SimpleXMLParser", "endDocument");
Log.v("SimpleXMLParser", "User Info: " + aUser.user_id + " "
+ aUser.firstname + " " + aUser.lastname);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.v("SimpleXMLParser", "startElement");
if (localName.equalsIgnoreCase(ID_ELEMENT)) {
state = ID;
} else if (localName.equalsIgnoreCase(FIRSTNAME_ELEMENT)) {
state = FIRSTNAME;
} else if (localName.equalsIgnoreCase(LASTNAME_ELEMENT)) {
state = LASTNAME;
} else {
state = NONE;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
Log.v("SimpleXMLParser", "endElement");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String stringChars = new String(ch, start, length);
if (state == ID) {
aUser.user_id += stringChars.trim();
Log.v("SimpleXMLParser", "user_id:" + aUser.user_id);
} else if (state == FIRSTNAME) {
aUser.firstname += stringChars.trim();
Log.v("SimpleXMLParser", "firstname:" + aUser.firstname);
} else if (state == LASTNAME) {
aUser.lastname += stringChars.trim();
Log.v("SimpleXMLParser", "lastname:" + aUser.lastname);
}
}
}
}
class XMLUser {
String user_id;
String firstname;
String lastname;
public XMLUser() {
user_id = "";
firstname = "";
lastname = "";
}
}
0
0
مشترک (12 سال پیش)
0
0
اگر متن سئوال رو تصحیح کنید و طبق راهنمای سایت سورس رو درج کنید خیلی خوب میشه. بین هر خط یک فاصله هست و چشمای من چنگال شد :) (12 سال پیش)
0
0
اصلاح شد . ولی هنگام درج کد اندازه فونت کوچک میشه و رنگ سیاه هم با پس زمینه قاطی میشه و اصلا خوانا نیست لطفا این مورد اصلاح شود (12 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
محمد حسین زاده
12 سال پیش
+2
0
تو موارد بسیاری میشه از داده های خارج دیتابیس تو برنامه استفاده کرد و قطعا این مورد برای هر برنامه نویسی پیش میاد. اما استفاده از json بجای xml به دلایل بسیاری توصیه میشه. حجم کمتر و سرعت بالاتر پارسی شدن json باعث محبوبیت بیشترش شده.
برای پردازش json میشه از ابزار جانبی gson استفاده کرد که قابلیت ایجاد رشته json از یه آبجکت جاوایی (کلاس ساده - استراکت - لیست ها و ...) و همچنین تبدیل رشته json به آبجکت های جاوایی رو داره.
دریافت gson
نمونه کد ایجاد رشته json از آبجکت جاوا :
public static String toJson(Object obj) {
Gson gson = new Gson();
return gson.toJson(obj);
}
نمونه کد ایجاد آبجکت جاوا از رشته json :
public static <T> T toObject(String json, Class<T> token) {
try {
if (json == null)
return null;
Gson gson = new Gson();
T list = gson.fromJson(json, token);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
نمونه کد ایجاد لیست جاوا از رشته json :
public static <T> ArrayList<T> toList(String json, Type token) {
if (json == null)
return new ArrayList<T>();
try {
Gson gson = new Gson();
List<T> list = gson.fromJson(json, token);
return list == null ? new ArrayList<T>() : new ArrayList<T>(list);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
نحوه تعریف Token برای متد آخر با فرض نام StructNote برای کلاس جاوا :
new TypeToken<List<StructNote>>(){}.getType()
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .