XML steht für Extensible Mark-up language.xml ist ein sehr beliebtes Format und die üblicherweise für den Austausch von Daten über das Internet verwendet wird. In diesem Kapitel wird erläutert, wie die XML-Datei zu analysieren und zu extrahieren notwendigen Informationen von ihm.
Android bietet drei Arten von XML-Parser, die sind DOM, SAX undXMLPullParser. Unter allen von ihnen android XMLPullParser empfehlen, weil es effizient und einfach zu bedienen. So werden wir XMLPullParser zum Parsen von XML verwenden
Der erste Schritt ist, um die Felder in den XML-Daten, bei denen Sie interessiert sind zu identifizieren. Zum Beispiel. In der XML Folgenden gegebenen daran interessiert, Temperatur.
<?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>
XML - Elements
Eine XML-Datei bestehen aus vielen Komponenten. Hier ist die Tabelle, die die Komponenten einer XML-Datei und deren Beschreibung.
Sr.No | Komponenten & Beschreibung |
---|---|
1 | Auftakt
Eine XML-Datei beginnt mit einem Prolog. Die erste Zeile, die die Informationen über eine Datei enthält, ist Prolog
|
2 | Veranstaltungen
Eine XML-Datei hat viele Veranstaltungen. Ereignis könnte so sein.Dokument beginnt, Dokument endet, Tag Anfang, Ende Tag und Text etc
|
3 | Text
Abgesehen von Tags und Events und XML-Datei enthält auch einfachen Text. Wie GB ist ein Text in dem Land-Tag.
|
4 | Attribute
Attribute sind die zusätzlichen Eigenschaften eines Tags wie Wert etc
|
XML - Parsing
Im nächsten Schritt werden wir XMLPullParser Objekt zu erstellen, sondern um zu erstellen, dass wir zuerst zu erstellen XmlPullParserFactory Objekt und rufen dann ihre newPullParser () -Methode XMLPullParser erstellen. Die Syntax ist unten angegeben -
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance(); private XmlPullParser myparser = xmlFactoryObject.newPullParser();
Der nächste Schritt beinhaltet die Angabe der Datei für XmlPullParser, die XML enthält. Es könnte eine Datei sein oder könnte ein Strom sein. In unserem Fall ist es ein stream.Its Syntax ist unten angegeben -
myparser.setInput(stream, null);
Der letzte Schritt ist, um die XML parsen. Eine XML-Datei besteht aus Ereignissen, name, text, AttributesValue etc So XMLPullParser verfügt über eine separate Funktion für die Analyse jeder der Komponente der XML-Datei. Die Syntax ist unten angegeben -
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(); }
Das Verfahren getEventType die Art der Veranstaltung, was geschieht, zurückgibt. zB: Dokument Start-Tag starten etc Die Methode getName gibt den Namen des Tags und da wir nur daran interessiert, in der Temperatur, so dass wir nur einchecken bedingte Anweisung, dass wenn wir eine Temperatur-Tag bekam, rufen wir die Methode getAttributeValue uns die Rück Wert der Temperatur-Tag.
Abgesehen von den diesen Verfahren gibt es andere von dieser Klasse für bessere Parsen von XML-Dateien bereitgestellten Verfahren. Diese Methoden sind: -
Sr.No | Verfahren & Beschreibung |
---|---|
1 | getAttributeCount ()
Diese Methode gibt nur die Anzahl der Attribute des aktuellen Start-Tag
|
2 | getAttributeName (int index)
Diese Methode gibt den Namen des Attributs durch den Indexwert bestimmt
|
3 | getColumnNumber ()
Diese Methode gibt den liefert die aktuelle Spaltennummer, beginnend bei 0.
|
4 | getDepth ()
Diese Methode liefert liefert die aktuelle Tiefe des Elements.
|
5 | getLineNumber ()
Gibt die aktuelle Zeilennummer, ab 1.
|
6 | getNamespace ()
Diese Methode gibt den Namensraum-URI des aktuellen Elements.
|
7 | getPrefix ()
Diese Methode gibt den Präfix des aktuellen Elements
|
8 | getName ()
Diese Methode gibt den Namen des Tags
|
9 | getText ()
Diese Methode gibt den Text für dieses spezielle Element
|
10 | isWhitespace ()
Diese Methode überprüft, ob die aktuelle Textereignis enthält nur Leerzeichen.
|
Beispiel
Hier ist ein Beispiel demonstriert die Verwendung von XMLPullParser Klasse. Es schafft eine Grund Wetter Anwendung, die Sie XML von Google Wetter API analysieren und zeigen das Ergebnis ermöglicht.
Um bei diesem Beispiel zu experimentieren, können Sie dies auf einem Gerät oder einem Emulator laufen.
Schritte | Bezeichnung |
---|---|
1 | Sie werden Android-Studio verwenden, um ein Android-Anwendung unter einem Paket com.example.sairamkrishna.myapplication erstellen.Bei der Erstellung dieses Projekt, stellen Sie sicher SDK Ziel und Kompilieren Sie mit der neuesten Version des Android SDK zu höheren Ebenen der APIs verwenden. |
2 | Ändern src / MainActivity.java Datei an erforderlichen Code hinzuzufügen. |
3 | Ändern Sie die res / layout / activity_main zum jeweiligen XML-Komponenten hinzufügen |
4 | Erstellen Sie eine neue Java-Datei unter src / HandleXML.java zu holen und zu parsen von XML-Daten |
5 | Ändern AndroidManifest.xml die notwendigen Internet-Berechtigung hinzufügen |
6 | Führen Sie die Anwendung und wählen Sie einen Lauf Android-Gerät und installieren Sie die Anwendung und überprüfen Sie die Ergebnisse |
Im Anschluss ist der Gehalt des modifizierten Haupttätigkeit DateiMainActivity.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); 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 // 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); } }
Im Anschluss wird der Inhalt des 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){ 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; } 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(); 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(); } }
Im Anschluss wird der modifizierte Inhalt der XML-res / layout /activity_main.xml.
<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: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" 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" 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" android:text="Pressure" /> </RelativeLayout>
Im Anschluss ist der Inhalt der AndroidManifest.xml Datei.
<?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>
Lassen Sie uns versuchen, unsere Anwendung, die wir gerade geändert laufen.Ich nehme an, Sie geschaffen hatte AVD dabei Umgebungskonfiguration. Um die App vom Android-Studio, öffnen Sie eine der Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf
Ausführen-Symbol in der Symbolleiste.Android-Studio installiert die App auf Ihrem AVD und startet es und wenn alles in Ordnung ist mit der Einrichtung und Anwendung, wird es folgende Emulator-Fenster anzuzeigen -
Nun, was Sie tun müssen, ist an eine beliebige Stelle im Feld Ort eingeben.Beispielsweise habe ich Indien eingetragen. Drücken Sie die Wetter Taste, wenn Sie den Speicherort eingeben. Der folgende Bildschirm scheint, in die Sie AVD -
Nun, wenn Sie das Wetter-Taste drücken, wird der Antrag an die Google Wetter API und wird für Ihre notwendigen XML Lage Datei anzufordern und wird sie zu analysieren. Im Fall von London folgende Datei würde zurückgegeben werden -
Beachten Sie, dass diese Temperatur in Kelvin, also, wenn Sie es in mehr understandble Format konvertieren wollen, um es in Celsius umrechnen müssen Sie.
0 التعليقات:
Kommentar veröffentlichen