Android XML Parser Tutorial

XML står for Extensible Markup Language.XML er et svært populært format og ofte brukt for deling av data på internett. Dette kapitlet forklarer hvordan å analysere XML-filen og hente nødvendig informasjon fra den.

Android har tre typer XML-parsere som er DOM, SAX og XMLPullParser
. Blant dem alle Android anbefaler XMLPullParser fordi det er effektiv og lett å bruke. Så vi kommer til å bruke XMLPullParser for parsing XML

Det første trinnet er å identifisere feltene i XML-dataene som du er interessert i. For eksempel. I XML gitt nedenfor vi interessert i å få temperaturen bare
. ≪? Xml version = "1.0" >? ≪ aktuell > ≪ byen id = "2643743" name = "London" > ≪ koord lon = "- 0,12574" lat = "51,50853" /> ≪ land > GB < /country > ≪ solen stige = "2013-10-08T06: 13: 56" set = "2013-10-08T17: 21: 45" /> ≪ /byen > ≪ temperatur value = "289,54" min = "289,15" max = "290,15" enhet = "kelvin" /> ≪ fuktighet value = "77" enhet = "%" /> ≪ press value = "1025" enhet = "hPa" /> < /country >
XML - Elements

En xml fil består av mange komponenter. Her er tabellen definere komponentene i en XML-fil og deres beskrivelse
Sr.NoComponent &.; description1 Prolog

En XML-fil starter med en prolog. Den første linjen som inneholder informasjon om en fil er prolog
2 Arrangementer

En XML-fil har mange arrangementer. Hendelses kan være sånn. Document starter, Dokument slutt, Tag start, Tag slutten og tekst etc
3 Tekst

Bortsett fra koder og arrangementer, og xml filen inneholder også enkel tekst. Slike som GB
er en tekst i landet lappen.
4 Attributter

er de ekstra egenskapene til en tagg som verdi etc

XML - Parsing

i neste trinn vil vi skape XMLPullParser objekt, men for å skape det vi først vil skape XmlPullParserFactory objektet og deretter ringe sin newPullParser () metode for å lage XMLPullParser. Syntaksen er gitt nedenfor −
privat XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance (); privat XmlPullParser myparser = xmlFactoryObject.newPullParser ();

Det neste trinnet innebærer å spesifisere fil for XmlPullParser som inneholder XML. Det kan være en fil eller kan være en Stream. I vårt tilfelle er det en stream.Its syntaks er gitt nedenfor −
myparser.setInput (strøm, null);

Det siste trinnet er å analysere XML. En XML-fil består av hendelser, navn, tekst, AttributesValue etc Så XMLPullParser har en egen funksjon for å analysere hver av de komponent av XML-fil. Syntaksen er gitt nedenfor −
int event = myParser.getEventType (); while (event = XmlPullParser.END_DOCUMENT!) {String name = myParser.getName (); bryteren (hendelse) {case XmlPullParser.START_TAG: break; Ved XmlPullParser.END_TAG: if (name.equals ( "temperaturen")) {temperatur = myParser.getAttributeValue (null, "verdi"); } gå i stykker; } Event = myParser.next (); }

Metoden getEventType
returnerer type hendelse som skjer. f.eks: Dokument start, tag start e.t.c. Metoden getName
returnerer navnet på taggen, og siden vi er bare interessert i temperatur, så vi bare sjekke inn betinget utsagn om at hvis vi fikk en temperatur tag, vi kaller metoden getAttributeValue
å returnere oss verdien av temperatur tag.

i tillegg til disse metodene, er det andre metoder som tilbys av denne klassen for bedre parsing XML-filer. Disse metodene er listet nedenfor −
Sr.NoMethod & description1 getAttributeCount ()

Denne metoden bare Returnerer antall attributter av dagens start tag
2 getAttributeName (int indeks)

Denne metoden returnerer navnet på attributtet spesifisert av indeksverdien
3 getColumnNumber ()

Denne metoden returnerer returnerer gjeldende kolonne nummer, fra 0.
4 getDepth ()

Denne metoden returnerer Returnerer gjeldende dybde av elementet.
5 getLineNumber ()

Returnerer gjeldende linjenummer, fra 1.
6 getNamespace ()

Denne metoden returnerer navnet plass URI av det aktuelle elementet.
7 getPrefix ()

Denne metoden returnerer prefikset av det aktuelle elementet
8 getName ()

Denne metoden returnerer navnet på taggen
9 gettext ()

Denne metoden returnerer teksten for det aktuelle element
10 isWhitespace ()

Denne metoden sjekker om den nåværende TEKST arrangementet inneholder bare blanke tegn.

eksempel

Her er et eksempel som viser bruk av XMLPullParser klasse. Det skaper en grunnleggende Været program som lar deg analysere XML fra google vær api og viser resultatet.

For å eksperimentere med dette eksempelet, du kan kjøre dette på en faktisk enhet eller i en emulator.
StepsDescription1You vil bruke Android studio for å lage en Android-applikasjon under en pakke com.example.sairamkrishna.myapplication. Mens du oppretter dette prosjektet, må du Target SDK og kompilere med på den nyeste versjonen av Android SDK for å bruke høyere nivåer av APIs.2Modify src /MainActivity.java filen for å legge nødvendig code.3Modify res /layout /activity_main å legge respektive XML components4Create en ny java fil under src /HandleXML.java å hente og analysere XML data5Modify AndroidManifest.xml å legge nødvendig internett permission6Run programmet og velge en som kjører android-enhet og installere programmet på den og kontrollere resultatene

følgende er innholdet av den modifiserte hovedaktiviteten fil MainActivity.java
.
pakken com.example.sairamkrishna.myapplication, import android.content.Context, importere android.content.Intent, import android.content.SharedPreferences, importere 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.myapplicationpublic klasse MainActivity strekker ActionBarActivity {EditText ed1, ED2, ED3, ED4, ed5; private String url1 = "http://api.openweathermap.org/data/2.5/weather?q="; private String url2 = "& mode = xml"; privat HandleXML obj; Button b1; beskyttet 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 (ny View.OnClickListener () {Override public void onClick (Vis 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 (Meny menyen) {//Blås menyen; dette legger til elementer i handlingsfeltet hvis det er til stede. . GetMenuInflater () blåse (R.menu.menu_main, menyen); return true; }Override Public boolean onOptionsItemSelected (MENUITEM element) {//Håndtak handlingslinjen element klikk her. Handlingen bar vil //automatisk håndtere klikk på Hjem /Opp-knappen, så lenge //som du angir en forelder aktivitet i AndroidManifest.xml. int id = item.getItemId (); //Noinspection SimplifiableIfStatement if (id == R.id.action_settings) {return true; } Returnere super.onOptionsItemSelected (post); }}

Følgende er innholdet av src /com.example.xmlparser /HandleXML.java
pakken 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; /** * Laget av Sairamkrishna på 4/11/2015. * /Public class HandleXML {private String country = "fylke"; private String temperatur = "temperatur"; private String fuktighet = "fuktighet"; private String trykk = "press"; private String urlString = null; privat XmlPullParserFactory xmlFactoryObject; offentlig volatile boolean parsingComplete = true; offentlig HandleXML (String url) {this.urlString = url; } Public String getCountry () {return landet; } Public String getTemperature () {return temperatur; } Public String getHumidity () {return fuktighet; } Public String getPressure () {return trykk; } Public void parseXMLAndStoreIt (XmlPullParser myParser) {int hendelse; String tekst = null; try {event = myParser.getEventType (); while (! event = XmlPullParser.END_DOCUMENT) {String name = myParser.getName (); bryteren (hendelse) {case XmlPullParser.START_TAG: break; Ved XmlPullParser.TEXT: text = myParser.getText (); gå i stykker; Ved XmlPullParser.END_TAG: if (name.equals ( "land")) {country = tekst; } Else if (name.equals ( "fuktighet")) {fuktighet = myParser.getAttributeValue (null, "verdi"); } Else if (name.equals ( "press")) {trykk = myParser.getAttributeValue (null, "verdi"); } Else if (name.equals ( "temperaturen")) {temperatur = myParser.getAttributeValue (null, "verdi"); } Else {} break; } Event = myParser.next (); } ParsingComplete = false; } Catch (Exception e) {e.printStackTrace (); }} Public void fetchXML () {tråd Tråd = ny tråd (ny kjørbart () {Override public void run () {try {URL url = ny URL (urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection (); conn.setReadTimeout (10000 /* millisekunder * /); conn.setConnectTimeout (15000 /* millisekunder * /); conn.setRequestMethod ( "GET"); conn.setDoInput (true); conn.connect (); Input stream = tilk .getInputStream (); xmlFactoryObject = XmlPullParserFactory.newInstance (); XmlPullParser myparser = xmlFactoryObject.newPullParser (); myparser.setFeature (XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); myparser.setInput (strøm, null); parseXMLAndStoreIt (myparser); stream.close ();} catch (Exception e) {e.printStackTrace (); }}}); thread.start (); }}

Følgende er endret innholdet i xml res /layout /activity_main.xml
< RelativeLayout xmlns:. Android = "http://schemas.android.com/apk/rES /android "xmlns: verktøy =" 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 "verktøy: kontekst =" 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: Tekststørrelse = "30dp" /> ≪ TextView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Guider Point" android: id = "+ id /textView2" android: layout_below = "+ id /textView" android: layout_centerHorizontal = "true" android: Tekststørrelse = "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 = "Vær" android: id = "+ id /knapp" 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 /knapp" android: layout_alignParentLeft = "true" android: layout_alignParentStart = "true" android: layout_alignRight = "+ id /EditText" android: layout_alignEnd = "+ id /EditText" android: text = "Valuta" /> ≪ 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 = "Fuktighet" /> ≪ 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 >

følgende er innholdet av AndroidManifest.xml
fil .?
< xml version = "1.0" encoding = "utf-8" > < manifest xmlns: android = "http://schemas.android.com/apk/res/android" pakken = " com.example.sairamkrishna.myapplication "> ≪ bruker-tillatelse android: name = "android.permission.INTERNET" /> ≪ søknad android: allowBackup = "true" android: icon = "@ mipmap /ic_launcher" android: label = "@ string /app_name" android: tema = "@ stil /AppTheme" > ≪ aktivitet android: ". MainActivity" name = android: label = "@ string /app_name" > ≪ intent-filter > ≪ handling android: name = "android.intent.action.MAIN" /> ≪ kategorien android: name = "android.intent.category.LAUNCHER" /> ≪ /intent-filter > ≪ /aktivitet > ≪ /søknad > < /manifest >

La oss prøve å kjøre vår søknad vi bare endret. Jeg antar at du hadde laget din AVD
mens du gjør oppsett miljø. For å kjøre programmet fra Android studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Android studio installerer programmet på AVD og starter den, og hvis alt er bra med oppsettet og anvendelse, vil det vise følgende Emulator vindu og minus;

Nå hva du trenger å gjøre er å skrive inn hvilket som helst sted i stedet feltet. For eksempel har jeg inngikk india. Trykk været knappen, når du går inn i stedet. Følgende skjermbilde vil vises i deg AVD −

Nå når du trykker på vær-knappen, programmet vil kontakte Google Weather API og vil be for din nødvendig XML plassering fil og vil analysere den. Ved London Følgende fil ville bli returnert −

Merk at denne temperaturen er i kelvin, så hvis du ønsker å konvertere den til mer understandble format, må du konvertere den til Celcius
.