آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نحوه پردازش فایل xml

طاهر  12 سال پیش  12 سال پیش
+4 0

پردازش فایل 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 attributesthrows 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()

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .