Android - parser XML

XML to skrót od Extensible Mark-up Language. XML to bardzo popularny format i powszechnie używany do udostępniania danych w Internecie. W tym rozdziale wyjaśniono, jak przeanalizować plik XML i wyodrębnić z niego niezbędne informacje.

Android udostępnia trzy typy parserów XML, którymi są DOM,SAX and XMLPullParser. Wśród nich Android polecam XMLPullParser, ponieważ jest wydajny i łatwy w użyciu. Więc zamierzamy użyć XMLPullParser do parsowania XML.

Pierwszym krokiem jest zidentyfikowanie pól w danych XML, którymi jesteś zainteresowany. Na przykład. W podanym poniżej pliku XML interesuje nas tylko uzyskanie temperatury.

<?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 - elementy

Plik xml składa się z wielu komponentów. Oto tabela definiująca składniki pliku XML i ich opis.

Sr.No Opis podzespołu
1

Prolog

Plik XML zaczyna się od prologu. Pierwsza linia zawierająca informacje o pliku to prolog

2

Events

Plik XML zawiera wiele zdarzeń. Wydarzenie mogłoby wyglądać tak. Początek dokumentu, koniec dokumentu, początek tagu, koniec tagu i tekst itp

3

Text

Oprócz tagów i zdarzeń, plik xml zawiera również prosty tekst. Jak na przykładGB to tekst w znaczniku kraju.

4

Attributes

Atrybuty to dodatkowe właściwości tagu, takie jak wartość itp

XML - analizowanie

W następnym kroku utworzymy obiekt XMLPullParser, ale aby go utworzyć, najpierw utworzymy obiekt XmlPullParserFactory, a następnie wywołamy jego metodę newPullParser (), aby utworzyć XMLPullParser. Jego składnia jest podana poniżej -

private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();

Następny krok obejmuje określenie pliku dla XmlPullParser, który zawiera XML. Może to być plik lub strumień. W naszym przypadku jest to strumień, którego składnię podano poniżej -

myparser.setInput(stream, null);

Ostatnim krokiem jest przeanalizowanie XML. Plik XML składa się ze zdarzeń, nazwy, tekstu, wartości atrybutów itp. Dlatego XMLPullParser ma oddzielną funkcję do analizowania każdego składnika pliku XML. Jego składnia jest podana poniżej -

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(); 					
}

Metoda getEventTypezwraca typ zdarzenia, które ma miejsce. np .: Początek dokumentu, początek tagu itp. MetodagetName zwraca nazwę tagu, a ponieważ interesuje nas tylko temperatura, więc sprawdzamy w instrukcji warunkowej, że jeśli mamy tag temperatury, wywołujemy metodę getAttributeValue aby zwrócić nam wartość tagu temperatury.

Oprócz tych metod istnieją inne metody zapewniane przez tę klasę w celu lepszego analizowania plików XML. Te metody są wymienione poniżej -

Sr.No Metoda i opis
1

getAttributeCount()

Ta metoda po prostu Zwraca liczbę atrybutów bieżącego tagu początkowego

2

getAttributeName(int index)

Ta metoda zwraca nazwę atrybutu określonego przez wartość indeksu

3

getColumnNumber()

Ta metoda zwraca Zwraca numer bieżącej kolumny, zaczynając od 0.

4

getDepth()

Ta metoda zwraca Zwraca bieżącą głębokość elementu.

5

getLineNumber()

Zwraca numer bieżącego wiersza, zaczynając od 1.

6

getNamespace()

Ta metoda zwraca identyfikator URI przestrzeni nazw bieżącego elementu.

7

getPrefix()

Ta metoda zwraca prefiks bieżącego elementu

8

getName()

Ta metoda zwraca nazwę tagu

9

getText()

Ta metoda zwraca tekst dla tego konkretnego elementu

10

isWhitespace()

Ta metoda sprawdza, czy bieżące zdarzenie TEXT zawiera tylko białe znaki.

Przykład

Oto przykład demonstrujący użycie XML DOM Parser. Tworzy podstawową aplikację, która pozwala analizować XML.

Aby poeksperymentować z tym przykładem, możesz uruchomić to na rzeczywistym urządzeniu lub w emulatorze.

Kroki Opis
1 Użyjesz Android Studio do stworzenia aplikacji na Androida w pakiecie com.example.sairamkrishna.myapplication.
2 Zmodyfikuj plik src / MainActivity.java, aby dodać niezbędny kod.
3 Zmodyfikuj res / layout / activity_main, aby dodać odpowiednie komponenty XML
4 Utwórz nowy plik XML w folderze Assets Folder / file.xml
5 Zmodyfikuj plik AndroidManifest.xml, aby dodać niezbędne uprawnienia internetowe
6 Uruchom aplikację i wybierz działające urządzenie z systemem Android, zainstaluj na nim aplikację i sprawdź wyniki

Poniżej znajduje się zawartość zmodyfikowanego pliku głównego działania 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();
   }

}

Poniżej znajduje się treść 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>

Poniżej znajduje się zmodyfikowana zawartość pliku xml 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>

Poniżej znajduje się treść AndroidManifest.xml plik.

<?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>

Spróbujmy uruchomić naszą aplikację, którą właśnie zmodyfikowaliśmy. Zakładam, że stworzyłeś swójAVDpodczas konfigurowania środowiska. Aby uruchomić aplikację ze studia Android, otwórz jeden z plików aktywności projektu i kliknij

ikonę Uruchom na pasku narzędzi. Studio Android instaluje aplikację na Twoim AVD i uruchamia ją, a jeśli wszystko jest w porządku z konfiguracją i aplikacją, wyświetli się następujące okno emulatora -