Android - XML Parser
XML è l'acronimo di Extensible Mark-up Language.XML è un formato molto popolare e comunemente utilizzato per la condivisione di dati su Internet. Questo capitolo spiega come analizzare il file XML ed estrarne le informazioni necessarie.
Android fornisce tre tipi di parser XML che sono DOM,SAX and XMLPullParser. Tra tutti Android consiglia XMLPullParser perché è efficiente e facile da usare. Quindi useremo XMLPullParser per analizzare XML.
Il primo passo è identificare i campi nei dati XML a cui sei interessato. Ad esempio. Nell'XML fornito di seguito ci interessa ottenere solo la temperatura.
<?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 - Elementi
Un file xml è costituito da molti componenti. Ecco la tabella che definisce i componenti di un file XML e la loro descrizione.
Suor n | Componente e descrizione |
---|---|
1 | Prolog Un file XML inizia con un prologo. La prima riga che contiene le informazioni su un file è prolog |
2 | Events Un file XML ha molti eventi. L'evento potrebbe essere così. Inizio del documento, Fine del documento, Inizio del tag, Fine del tag e Testo ecc |
3 | Text Oltre a tag ed eventi, e il file xml contiene anche testo semplice. Ad esempioGB è un testo nel tag del paese. |
4 | Attributes Gli attributi sono le proprietà aggiuntive di un tag come valore ecc |
XML - Parsing
Nel passaggio successivo, creeremo l'oggetto XMLPullParser, ma per crearlo creeremo prima l'oggetto XmlPullParserFactory e quindi chiameremo il suo metodo newPullParser () per creare XMLPullParser. La sua sintassi è data di seguito:
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();
Il passaggio successivo prevede la specifica del file per XmlPullParser che contiene XML. Potrebbe essere un file o potrebbe essere un flusso. Nel nostro caso si tratta di un flusso, la cui sintassi è riportata di seguito:
myparser.setInput(stream, null);
L'ultimo passaggio è analizzare l'XML. Un file XML è composto da eventi, Nome, Testo, AttributesValue ecc. Quindi XMLPullParser ha una funzione separata per l'analisi di ogni componente del file XML. La sua sintassi è data di seguito:
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();
}
Il metodo getEventTyperestituisce il tipo di evento che si verifica. es: inizio documento, inizio tag, ecc. Il metodogetName restituisce il nome del tag e poiché siamo interessati solo alla temperatura, quindi controlliamo semplicemente nell'istruzione condizionale che se abbiamo un tag di temperatura, chiamiamo il metodo getAttributeValue per restituirci il valore del tag di temperatura.
Oltre a questi metodi, ci sono altri metodi forniti da questa classe per analizzare meglio i file XML. Questi metodi sono elencati di seguito:
Suor n | Metodo e descrizione |
---|---|
1 | getAttributeCount() Questo metodo restituisce solo il numero di attributi del tag di inizio corrente |
2 | getAttributeName(int index) Questo metodo restituisce il nome dell'attributo specificato dal valore di indice |
3 | getColumnNumber() Questo metodo restituisce Restituisce il numero di colonna corrente, a partire da 0. |
4 | getDepth() Questo metodo restituisce Restituisce la profondità corrente dell'elemento. |
5 | getLineNumber() Restituisce il numero di riga corrente, a partire da 1. |
6 | getNamespace() Questo metodo restituisce l'URI dello spazio dei nomi dell'elemento corrente. |
7 | getPrefix() Questo metodo restituisce il prefisso dell'elemento corrente |
8 | getName() Questo metodo restituisce il nome del tag |
9 | getText() Questo metodo restituisce il testo per quel particolare elemento |
10 | isWhitespace() Questo metodo controlla se l'evento TEXT corrente contiene solo spazi vuoti. |
Esempio
Ecco un esempio che dimostra l'uso di XML DOM Parser. Crea un'applicazione di base che ti consente di analizzare XML.
Per sperimentare questo esempio, puoi eseguirlo su un dispositivo reale o in un emulatore.
Passi | Descrizione |
---|---|
1 | Utilizzerai Android Studio per creare un'applicazione Android con un pacchetto com.example.sairamkrishna.myapplication. |
2 | Modifica il file src / MainActivity.java per aggiungere il codice necessario. |
3 | Modifica res / layout / activity_main per aggiungere i rispettivi componenti XML |
4 | Crea un nuovo file XML in Assets Folder / file.xml |
5 | Modifica AndroidManifest.xml per aggiungere l'autorizzazione Internet necessaria |
6 | Esegui l'applicazione e scegli un dispositivo Android in esecuzione, installa l'applicazione su di esso e verifica i risultati |
Di seguito è riportato il contenuto del file di attività principale modificato 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();
}
}
Di seguito è riportato il contenuto di 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>
Di seguito è riportato il contenuto modificato del file 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>
Di seguito è riportato il contenuto di AndroidManifest.xml file.
<?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>
Proviamo a eseguire la nostra applicazione che abbiamo appena modificato. Presumo che tu abbia creato il tuoAVDdurante l'impostazione dell'ambiente. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic