Android - Analyseur XML
XML signifie Extensible Mark-up Language. XML est un format très populaire et couramment utilisé pour partager des données sur Internet. Ce chapitre explique comment analyser le fichier XML et en extraire les informations nécessaires.
Android fournit trois types d'analyseurs XML qui sont DOM,SAX and XMLPullParser. Parmi tous, Android recommande XMLPullParser car il est efficace et facile à utiliser. Nous allons donc utiliser XMLPullParser pour analyser XML.
La première étape consiste à identifier les champs des données XML qui vous intéressent. Par exemple. Dans le XML ci-dessous, nous nous intéressons uniquement à la température.
<?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 - Éléments
Un fichier xml se compose de nombreux composants. Voici le tableau définissant les composants d'un fichier XML et leur description.
Sr. Non | Composant et description |
---|---|
1 | Prolog Un fichier XML commence par un prologue. La première ligne qui contient les informations sur un fichier est prolog |
2 | Events Un fichier XML contient de nombreux événements. L'événement pourrait être comme ça. Début du document, fin du document, début de la balise, fin de la balise et texte, etc. |
3 | Text Outre les balises et les événements, le fichier xml contient également du texte simple. Tel queGB est un texte dans la balise de pays. |
4 | Attributes Les attributs sont les propriétés supplémentaires d'une balise telles que la valeur, etc. |
XML - Analyse
Dans l'étape suivante, nous allons créer l'objet XMLPullParser, mais pour le créer, nous allons d'abord créer l'objet XmlPullParserFactory, puis appeler sa méthode newPullParser () pour créer XMLPullParser. Sa syntaxe est donnée ci-dessous -
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();
L'étape suivante consiste à spécifier le fichier pour XmlPullParser qui contient du XML. Cela peut être un fichier ou un flux. Dans notre cas, il s'agit d'un flux dont la syntaxe est donnée ci-dessous -
myparser.setInput(stream, null);
La dernière étape consiste à analyser le XML. Un fichier XML se compose d'événements, de nom, de texte, de valeur d'attributs, etc. Ainsi, XMLPullParser a une fonction distincte pour analyser chacun des composants du fichier XML. Sa syntaxe est donnée ci-dessous -
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();
}
La méthode getEventTyperenvoie le type d'événement qui se produit. ex: début du document, début de la balise, etc.getName renvoie le nom de la balise et comme nous ne sommes intéressés que par la température, nous vérifions simplement la déclaration conditionnelle que si nous avons une balise de température, nous appelons la méthode getAttributeValue pour nous renvoyer la valeur de l'étiquette de température.
En dehors de ces méthodes, il existe d'autres méthodes fournies par cette classe pour une meilleure analyse des fichiers XML. Ces méthodes sont énumérées ci-dessous -
Sr. Non | Méthode et description |
---|---|
1 | getAttributeCount() Cette méthode renvoie simplement le nombre d'attributs de la balise de début actuelle |
2 | getAttributeName(int index) Cette méthode renvoie le nom de l'attribut spécifié par la valeur d'index |
3 | getColumnNumber() Cette méthode renvoie le Renvoie le numéro de colonne actuel, à partir de 0. |
4 | getDepth() Cette méthode retourne Renvoie la profondeur actuelle de l'élément. |
5 | getLineNumber() Renvoie le numéro de ligne actuel, à partir de 1. |
6 | getNamespace() Cette méthode renvoie l'URI d'espace de nom de l'élément actuel. |
sept | getPrefix() Cette méthode renvoie le préfixe de l'élément courant |
8 | getName() Cette méthode renvoie le nom de la balise |
9 | getText() Cette méthode renvoie le texte de cet élément particulier |
dix | isWhitespace() Cette méthode vérifie si l'événement TEXT actuel ne contient que des espaces. |
Exemple
Voici un exemple illustrant l'utilisation de XML DOM Parser. Il crée une application de base qui vous permet d'analyser XML.
Pour expérimenter cet exemple, vous pouvez l'exécuter sur un appareil réel ou dans un émulateur.
Pas | La description |
---|---|
1 | Vous utiliserez Android Studio pour créer une application Android sous un package com.example.sairamkrishna.myapplication. |
2 | Modifiez le fichier src / MainActivity.java pour ajouter le code nécessaire. |
3 | Modifiez le res / layout / activity_main pour ajouter les composants XML respectifs |
4 | Créez un nouveau fichier XML sous Assets Folder / file.xml |
5 | Modifiez AndroidManifest.xml pour ajouter l'autorisation Internet nécessaire |
6 | Exécutez l'application et choisissez un appareil Android en cours d'exécution, installez l'application dessus et vérifiez les résultats |
Voici le contenu du fichier d'activité principal modifié 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();
}
}
Voici le contenu de 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>
Voici le contenu modifié du 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>
Voici le contenu de AndroidManifest.xml fichier.
<?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>
Essayons de lancer notre application que nous venons de modifier. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application à partir du studio Android, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l'