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