Android - XML ​​Parser Tutorial

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.NoKomponenten & Beschreibung
1Auftakt
Eine XML-Datei beginnt mit einem Prolog. Die erste Zeile, die die Informationen über eine Datei enthält, ist Prolog
2Veranstaltungen
Eine XML-Datei hat viele Veranstaltungen. Ereignis könnte so sein.Dokument beginnt, Dokument endet, Tag Anfang, Ende Tag und Text etc
3Text
Abgesehen von Tags und Events und XML-Datei enthält auch einfachen Text. Wie GB ist ein Text in dem Land-Tag.
4Attribute
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.NoVerfahren & Beschreibung
1getAttributeCount ()
Diese Methode gibt nur die Anzahl der Attribute des aktuellen Start-Tag
2getAttributeName (int index)
Diese Methode gibt den Namen des Attributs durch den Indexwert bestimmt
3getColumnNumber ()
Diese Methode gibt den liefert die aktuelle Spaltennummer, beginnend bei 0.
4getDepth ()
Diese Methode liefert liefert die aktuelle Tiefe des Elements.
5getLineNumber ()
Gibt die aktuelle Zeilennummer, ab 1.
6getNamespace ()
Diese Methode gibt den Namensraum-URI des aktuellen Elements.
7getPrefix ()
Diese Methode gibt den Präfix des aktuellen Elements
8getName ()
Diese Methode gibt den Namen des Tags
9getText ()
Diese Methode gibt den Text für dieses spezielle Element
10isWhitespace ()
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.
SchritteBezeichnung
1Sie 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
4Erstellen 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
6Fü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 Eclipse-Run IconAusfü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 -
Anroid XML Parser Tutorial
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 -
Anroid XMLParser Tutorial
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.
Share on Google Plus

About ptjqatar

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

0 التعليقات:

Kommentar veröffentlichen