Android - XML Ayrıştırıcı
XML, Genişletilebilir Biçimlendirme Dili anlamına gelir. XML çok popüler bir biçimdir ve internette veri paylaşmak için yaygın olarak kullanılır. Bu bölüm XML dosyasının nasıl ayrıştırılacağını ve ondan gerekli bilgilerin nasıl çıkarılacağını açıklar.
Android üç tür XML ayrıştırıcı sağlar; DOM,SAX and XMLPullParser. Bunların arasında android, verimli ve kullanımı kolay olduğu için XMLPullParser'ı önermektedir. Bu yüzden XML'i ayrıştırmak için XMLPullParser'ı kullanacağız.
İlk adım, ilgilendiğiniz XML verilerindeki alanları belirlemektir. Örneğin. Aşağıda verilen XML'de sadece sıcaklık elde etmekle ilgileniyoruz.
<?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"/>
</current>
XML - Öğeler
Bir xml dosyası birçok bileşenden oluşur. İşte bir XML dosyasının bileşenlerini ve açıklamalarını tanımlayan tablo.
Sr.No | Bileşen Açıklaması |
---|---|
1 | Prolog Bir XML dosyası bir önsöz ile başlar. Bir dosya hakkındaki bilgileri içeren ilk satır prologdur |
2 | Events Bir XML dosyasında birçok etkinlik vardır. Olay böyle olabilir. Belge başlar, Belge biter, Etiket başlangıcı, Etiket sonu ve Metin vb. |
3 | Text Etiketler ve olayların yanı sıra xml dosyası da basit metin içerir. GibiGB ülke etiketindeki bir metindir. |
4 | Attributes Öznitelikler, değer vb. Gibi bir etiketin ek özellikleridir. |
XML - Ayrıştırma
Bir sonraki adımda XMLPullParser nesnesi oluşturacağız, ancak bunu oluşturmak için önce XmlPullParserFactory nesnesini oluşturacağız ve ardından XMLPullParser oluşturmak için newPullParser () yöntemini çağıracağız. Söz dizimi aşağıda verilmiştir -
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();
Sonraki adım, XML içeren XmlPullParser dosyasını belirtmeyi içerir. Bir dosya veya bir Akış olabilir. Bizim durumumuzda bu bir akımdır ve sözdizimi aşağıda verilmiştir -
myparser.setInput(stream, null);
Son adım, XML'i ayrıştırmaktır. Bir XML dosyası olaylar, Ad, Metin, ÖzniteliklerValue vb. Söz dizimi aşağıda verilmiştir -
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();
}
Yöntem getEventTypemeydana gelen olayın türünü döndürür. örneğin: Belge başlangıcı, etiket başlangıcı vb. YöntemgetName etiketin adını döndürür ve yalnızca sıcaklıkla ilgilendiğimiz için, koşullu ifadeyi kontrol ederiz, bir sıcaklık etiketi alırsak, yöntemi getAttributeValue bize sıcaklık etiketinin değerini döndürmek için.
Bu yöntemlerin dışında, XML dosyalarını daha iyi ayrıştırmak için bu sınıf tarafından sağlanan başka yöntemler vardır. Bu yöntemler aşağıda listelenmiştir -
Sr.No | Yöntem ve açıklama |
---|---|
1 | getAttributeCount() Bu yöntem yalnızca geçerli başlangıç etiketinin öznitelik sayısını döndürür |
2 | getAttributeName(int index) Bu yöntem, dizin değeriyle belirtilen özniteliğin adını döndürür |
3 | getColumnNumber() Bu yöntem, 0'dan başlayarak geçerli sütun numarasını döndürür. |
4 | getDepth() Bu yöntem, elemanın geçerli derinliğini döndürür. |
5 | getLineNumber() 1'den başlayarak geçerli satır numarasını döndürür. |
6 | getNamespace() Bu yöntem, geçerli elemanın isim alanı URI'sini döndürür. |
7 | getPrefix() Bu yöntem mevcut elemanın önekini döndürür |
8 | getName() Bu yöntem, etiketin adını döndürür |
9 | getText() Bu yöntem, söz konusu öğenin metnini döndürür |
10 | isWhitespace() Bu yöntem, geçerli TEXT olayının yalnızca boşluk karakterleri içerip içermediğini kontrol eder. |
Misal
XML DOM Parser'ın kullanımını gösteren bir örnek aşağıda verilmiştir. XML'i ayrıştırmanıza izin veren temel bir uygulama oluşturur.
Bu örneği denemek için, bunu gerçek bir cihazda veya bir emülatörde çalıştırabilirsiniz.
Adımlar | Açıklama |
---|---|
1 | Com.example.sairamkrishna.myapplication paketinin altında Android uygulaması oluşturmak için Android stüdyosunu kullanacaksınız. |
2 | Gerekli kodu eklemek için src / MainActivity.java dosyasını değiştirin. |
3 | İlgili XML bileşenlerini eklemek için res / layout / activity_main'i değiştirin |
4 | Assets Folder / file.xml altında yeni bir XML dosyası oluşturun |
5 | Gerekli internet iznini eklemek için AndroidManifest.xml dosyasını değiştirin |
6 | Uygulamayı çalıştırın ve çalışan bir android cihazı seçin ve üzerine uygulamayı yükleyin ve sonuçları doğrulayın |
Aşağıda, değiştirilen ana etkinlik dosyasının içeriği yer almaktadır MainActivity.java.
package com.example.sairamkrishna.myapplication;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
try {
InputStream is = getAssets().open("file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
Element element=doc.getDocumentElement();
element.normalize();
NodeList nList = doc.getElementsByTagName("employee");
for (int i=0; i<nList.getLength(); i++) {
Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element2 = (Element) node;
tv1.setText(tv1.getText()+"\nName : " + getValue("name", element2)+"\n");
tv1.setText(tv1.getText()+"Surname : " + getValue("surname", element2)+"\n");
tv1.setText(tv1.getText()+"-----------------------");
}
}
} catch (Exception e) {e.printStackTrace();}
}
private static String getValue(String tag, Element element) {
NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = nodeList.item(0);
return node.getNodeValue();
}
}
Aşağıdakilerin içeriği Assets/file.xml.
<?xml version="1.0"?>
<records>
<employee>
<name>Sairamkrishna</name>
<surname>Mammahe</surname>
<salary>50000</salary>
</employee>
<employee>
<name>Gopal </name>
<surname>Varma</surname>
<salary>60000</salary>
</employee>
<employee>
<name>Raja</name>
<surname>Hr</surname>
<salary>70000</salary>
</employee>
</records>
Xml'nin değiştirilmiş içeriği aşağıdadır res/layout/activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
Aşağıdakilerin içeriği AndroidManifest.xml dosya.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<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>
Yeni değiştirdiğimiz uygulamamızı çalıştırmayı deneyelim. Senin yarattığını varsayıyorumAVDortam kurulumu yapılırken. Uygulamayı Android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın