Upload
others
View
21
Download
0
Embed Size (px)
Citation preview
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
بسم اهلل الرحمن الرحیم
آموزشگاه تحلیل داده
برنامه نویسی و دیتابیس در ایران ترین مرکز تخصصی
XML ی کننده تجزیه آموزش
مدرس : مهندس افشین رفوآ
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
XML آموزش تجزیه کننده ی
XMLآموزش تجزیه کننده ی
XML مخفف عبارتExtensible Markup Language .می باشدXML یک فرمت خیلی معروف بوده و متداوال
را xmlبرای اشتراک گذاری داده در اینترنت استفاده می شود. این فصل توضیح می دهد که چگونه فایل
عات الز را از آن استخرا کرد.تجزیه کرده و اطال
و در بین این سه XMLPullParserو DOM ،SAXارائه می دهد که عبارتند از xmlاندروید سه نوع تجزیه گر
را پیشنهاد می دهد زیرا موثر بوده و استفاده از آن نیز آسان می باشد. بنابراین ما XMLPullParserاندروید
استفاده کنیم. xmlبرای تجزیه ی XMLPullParserقرار است از
ارائه شده xmlمی باشد که مورد عالقه ی شما هستند. به عنوان مثال در xmlولین گا معرفی فیلدهایی در ا
اریم دمای هوا را به دست آوریم.در زیر ما تمایل د
<?xml version="1.0"?>
<current>
<city id="2643743" name="London">
<coord lon="-0.12574" lat="51.50853"/>
<country>GB</country>
<sun rise="2013-10-08T06:13:56" set="2013-10-08T17:21:45"/>
</city>
<temperature value="289.54" min="289.15" max="290.15" unit="kelvin"/>
<humidity value="77" unit="%"/>
<pressure value="1025" unit="hPa"/>
</country>
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
XML – عناصر
دارای مولفه های بسیاری می باشد. در اینجا جدولی را مشاهده می کنید که مولفه های مربوطبه xmlیک فایل
.را تعریف می کند xmlیک فایل
Sr.No
مولفه و توضیح
1
Prolog
شروع می شود. اولین خط که شامل اطالعاتی در مورد یک فایل (prolog)با یک مقدمه xmlیک فایل
است، مقدمه نامیده می شود.
2
Events
دارای رویدادهای بسیاری می باشد. یک رویداد می تواند چیزی شبیه این باشد: xmlیک فایل
و متن و غیره. tag، پایان tagشروع داکیومنت، پایان داکیومنت، شروع
3
Text
یک GBدارای یک متن ساده نیز می باشد. به عنوان مثال xmlها، یک فایل tagعالوه با رویداد ها و
می باشد. country tagمتن در
4
Attributes
هستند، مانند مقدار وغیره. tagویژگی ها پراپرتی های اضافه ای از یک
XML – تجزیه
ایجاد خواهیم کرد اما به خاطر انجا این کار ابتدا آبجکت XMLPullParserدر مرحله بعد، یک آبجکت
XmlPullParserFactory ایجاد کرده و سپس روشnewPullParser() را فرامی خوانیم تاXMLPullParser را
.ترکیب آن در زیر ارائه شده است ایجاد کنیم.
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
private XmlPullParserFactory xmlFactoryObject =
XmlPullParserFactory.newInstance();
private XmlPullParser myparser =
xmlFactoryObject.newPullParser();
می باشد، که می تواند یک xmlمی شود که دارای XmlPullParserگا بعدی شامل مشخص کردن فایلی برای
.را می توانید مشاهده کنیدیب آن است. ترک streamبا که در ان مورد یک streamفایل یا یک
myparser.setInput(stream, null);
AttributesValueشامل رویدادها، نا و متن و xmlمی باشد. یک فایل XMLو باالخره آخرین مرحله تجزیه ی
دارای یک ساختار مجزا برای تجزیه ی هر فایل XMLPullParser)مقدار ویژگی ها( و غیره می باشد. بنابراین
xml .ترکیب آن در زیر ارائه شده است می باشد.
int event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT)
{
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.END_TAG:
if(name.equals("temperature")){
temperature = myParser.getAttributeValue(null,"value");
}
break;
}
event = myParser.next();
}
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
دهد. به عنوان مثال شروع داکیومنت، نوع رویدادی را که اتفاق می افتد گزارش می getEventTypeروش
را گزارش می دهد و از آنجایی که ما عالقه مند به اندازه گیری tagنا getName، و غیره. روش tagشروع
را چک می می مربوط به دما داشته باشیم، در وضعیت مشروط فقط آن tagدمای هوا هستیم بناباین اگر یک
دما را گزارش دهد. tagرا فرا می خوانیم تا به ما مقدار getAttributeValueکنیم، و روش
ه در زیر توسط این گروه ارائه می شوند ک xmlعالوه بر این روش ها، روش های دیگری برای تجزیه ی بهتر
.لیست آنها را می بینید
Sr.No
Method & description
1
getAttributeCount()
موجود را گزارش می دهد. start tagاین روش تعداد ویژگی های
2
getAttributeName(int index)
این روش نا ویژگی مشخص شده توسط شاخص مقدار را گزارش می دهد.
3
getColumnNumber()
.0گزارش می دهد، شروع از این روش تعداد گزارش های مربوط به تعداد ستون های موجود را
4
getDepth()
این روش آخرین عمق مربوط به عنصر را گزارش می دهد.
5
getLineNumber()
.1این روش تعداد آخرین خطوط را گزارش می دهد، شروع از عدد
6
getNamespace()
فضانا های مربوط به آخرین عنصر را گزارش می دهد. URIاین روش
7
getPrefix()
این روش پیشوند مربوط به عنصر موجود را گزارش می دهد.
8
getName()
را گزارش می دهد. tagاین روش نا
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
9
getText()
ین روش متن مربوط به عنصر خاص را گزارش می دهد.ا
10
isWhitespace()
فعلی فقط دارای کاراکنرهای فضای سفید می باشد. TEXTاین روش چک می کند که آیا رویداد
مثال
را توضیح می دهد. این مثال یک برنامه ی آب MLPullParserدر اینجا مثالی را می بینید که استفاده از گروه
یه کنید و تجز google weather apiرا از طریق XMLهوایی پایه ایجاد می کند که به شما اجازه می دهد تا
نتایج را نشان می دهد.
اجرا کنید. emulatorبرای انجا این مثال باید آن را روی یک دستگاه واقعی یا یک
Steps Description
1
استفاده خواهید کرد و آن را با Eclipse IDEبرای ایجاد یک برنامه ی اندروید از
نا گذاری کنید. زمان com.example.xmlparser تحت بسته ی XMLParserعنوان
در آخرین ورژن Compile Withو Target SDKایجاد این برنامه مطمئن شوید که
Android SDK هستند تا از سطوح باالترAPI .استفاده کنید
را برای افزودن کد الز تغییر دهید. src/MainActivity.javaفایل 2
3 res/layout/activity_main را برای افزودن مولفه هایXML .مربوطه تغییر دهید
4 res/values/string.xml .را برای افزودن مولفه های رشته ی الز تغییر دهید
را XMLایجاد کنید تا داده src/HandleXML.javaیک فایل جاوای جدید تحت 5
برگردانده و تجزیه کنید.
6 AndroidManifest.xml .را برای افزودن اجازه ی اینترنت تغییر دهید
برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن 7
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
نصب کنید و نتایج را بررسی کنید.
.فعالیت اصلی را مشاهده می کنید در زیر محتوای تغییر یافته ی فایل
src/com.example.xmlparser/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
com.example.sairamkrishna.myapplication
public class MainActivity extends ActionBarActivity {
EditText ed1,ed2,ed3,ed4,ed5;
private String url1 =
"http://api.openweathermap.org/data/2.5/weather?q=";
private String url2 = "&mode=xml";
private HandleXML obj;
Button b1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
b1=(Button)findViewById(R.id.button);
ed1=(EditText)findViewById(R.id.editText);
ed2=(EditText)findViewById(R.id.editText2);
ed3=(EditText)findViewById(R.id.editText3);
ed4=(EditText)findViewById(R.id.editText4);
ed5=(EditText)findViewById(R.id.editText5);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = ed1.getText().toString();
String finalUrl = url1 + url + url2;
ed2.setText(finalUrl);
obj = new HandleXML(finalUrl);
obj.fetchXML();
while(obj.parsingComplete);
ed2.setText(obj.getCountry());
ed3.setText(obj.getTemperature());
ed4.setText(obj.getHumidity());
ed5.setText(obj.getPressure());
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if
it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
// automatically handle clicks on the Home/Up button, so
long
// as you specify a parent activity in
AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
.می باشد src/com.example.xmlparser/HandleXML.javaدر اینجا محتوای
package com.example.sairamkrishna.myapplication;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by Sairamkrishna on 4/11/2015.
*/
public class HandleXML {
private String country = "county";
private String temperature = "temperature";
private String humidity = "humidity";
private String pressure = "pressure";
private String urlString = null;
private XmlPullParserFactory xmlFactoryObject;
public volatile boolean parsingComplete = true;
public HandleXML(String url){
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
this.urlString = url;
}
public String getCountry(){
return country;
}
public String getTemperature(){
return temperature;
}
public String getHumidity(){
return humidity;
}
public String getPressure(){
return pressure;
}
public void parseXMLAndStoreIt(XmlPullParser myParser) {
int event;
String text=null;
try {
event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = myParser.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("country")){
country = text;
}
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
else if(name.equals("humidity")){
humidity =
myParser.getAttributeValue(null,"value");
}
else if(name.equals("pressure")){
pressure =
myParser.getAttributeValue(null,"value");
}
else if(name.equals("temperature")){
temperature =
myParser.getAttributeValue(null,"value");
}
else{
}
break;
}
event = myParser.next();
}
parsingComplete = false;
}
catch (Exception e) {
e.printStackTrace();
}
}
public void fetchXML(){
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
URL url = new URL(urlString);
HttpURLConnection conn =
(HttpURLConnection)url.openConnection();
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
InputStream stream = conn.getInputStream();
xmlFactoryObject =
XmlPullParserFactory.newInstance();
XmlPullParser myparser =
xmlFactoryObject.newPullParser();
myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,
false);
myparser.setInput(stream, null);
parseXMLAndStoreIt(myparser);
stream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
}
می باشد. res/layout/activity_main.xml مربوط به xmlدر اینجا محتوای تغییریافته ی
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XML Fetch"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials Point"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:textSize="35dp"
android:textColor="#ff16ff01" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Location"
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="61dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Weather "
android:id="@+id/button"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_below="@+id/button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText"
android:text="Currency" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
android:id="@+id/editText3"
android:layout_below="@+id/editText2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="Temp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText4"
android:layout_below="@+id/editText3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/editText3"
android:layout_alignEnd="@+id/editText3"
android:text="Humidity" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText5"
android:layout_below="@+id/editText4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
android:text="Pressure" />
</RelativeLayout>
را مشاهده می کنید. AndroidManifest.xmlدر اینجا محتوای فایل
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
خود را که تازه تغییر یافته، اجرا کنیم. فرض می کنیم که شما در هنگا XMLParserاجازه بدهید برنامه ی
ژه یکی از فایل هایفعالیت پرو Eclipseخود را ایجاد کرده اید. برای اجرای برنامه از AVDانجا تنظیمات محیط
شما نصب خواهد کرد و AVDبرنامه را روی Eclipseتولبار کلیک کنید. Runآیکنی خود را باز کنید و روی
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
زیر را نمایش خواهد emulatorاگر همه چیز در مورد تنظیمات و برنامه درست پیش رفته باشد، پنجره ی
داد.
می باشد. به عنوان مثال من لندن locationکاری که اکنون باید انجا دهید وارد کردن هر موقعیتی در فیلد
نممایش AVDرا فشار دهید که صفحه ی زیر روی weatherرا وارد کرد . پس از وارد کردن مکان، دکمه ی
داده خواهد شد.
7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330
تماس برقرار خواهد کرد و Google Weather APIرا فشار می دهید برنامه با weatherوقتی دکمه ی
صفحه ی زیر ما را درخواست کرده و آن را تجزیه می کند. در مورد لندنش XMLموقعیت ضروری فایل
گزارش داده خواهد شد.
ید دما را به سلسیوس توجه داشته باشید که این دما به کلوین می باشد و برای قابل درک بودن فرمت آن، با
تبدیل کنید.