Análisis XML en Android usando XmlPullParser

En Android, la interfaz XMLPullParser proporciona la funcionalidad para analizar los archivos XML en las aplicaciones de Android. El XMLPullParser es un método de análisis simple y eficiente para analizar los datos XML en comparación con otros métodos de análisis como DOM Parser y SAX Parser. El XMLPullParser tiene un método next() que brinda acceso a eventos de análisis de alto nivel. El método next() hará avanzar el analizador al siguiente evento. Las siguientes son las series de eventos disponibles en XMLPullParser , que serán vistos por el método next() .

  1. START_DOCUMENT: el analizador comienza a procesar el documento XML.
  2. START_TAG: en este evento, podemos obtener la etiqueta de inicio en XML.
  3. TEXTO: En este evento, podemos leer el contenido del texto usando el método getText().
  4. END_TAG: se leyó una etiqueta final.
  5. END_DOCUMENT: No hay más eventos disponibles.

Análisis XML de otras dos formas. Por favor, consulte los siguientes artículos:

¿Qué vamos a hacer?

XMLPullParser analiza un archivo XML con una serie de eventos, como START_DOCUMENT, START_TAG, TEXT, END_TAG y END_DOCUMENT para analizar el documento XML. Para leer y analizar archivos XML utilizando XMLPullParser en Android, es necesario crear una instancia de XMLPullParserFactory y XMLPullParser .

Acercarse

Para analizar un archivo XML utilizando un analizador DOM en Android, seguimos los siguientes pasos:

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.

Paso 2: Crea una carpeta de activos

Cree una carpeta de activos debajo de la carpeta principal en el diseño del proyecto . Cree un archivo de recursos de Android en esta carpeta, donde colocaremos la información en forma de XML . Nombre este archivo como userdetails.xml . Para hacerlo, consulte los siguientes pasos:

Haga clic en Proyecto como se muestra en el lado izquierdo de la imagen de abajo. 

Click on project

Expanda hasta encontrar la carpeta principal, haga clic derecho sobre ella, vaya a Nuevo > Carpeta > Carpeta de activos

Asset folder

Luego simplemente haga clic en el botón Finalizar.

asset folder

Ahora la carpeta de activos se crea correctamente. Haga clic con el botón derecho en la Carpeta de activos > Nuevo > Archivo de recursos de Android 

asset folder

Déle el nombre Información, cambie el tipo a XML y finalice.

Nota: a veces, al hacer clic con el botón derecho en la carpeta Activos y crear un archivo de recursos de Android, se crea un archivo en la carpeta res . Si esto sucede, corte nuestro archivo y péguelo directamente en la carpeta de activos . Esto sucede debido a algunas configuraciones internas.

asset folder

Pegue esta información que está en forma de XML, que se mostrará en el archivo userdetails.xml . A continuación se muestra el código para el archivo userdetails.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<users>
    <user>
        <name>Tom</name>
        <designation>Actor and Producer</designation>
    </user>
    <user>
        <name>Danny</name>
        <designation>Music Director</designation>
    </user>
    <user>
        <name>Christopher</name>
        <designation>Writer</designation>
    </user>
</users>

Paso 3: trabajar con el archivo activity_main.xml

Ahora vaya al archivo activity_main.xml que representa la interfaz de usuario de la aplicación. Cree un ListView como se muestra. actividad_principal.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
  
    <!--Display the list from list_row file-->
    <ListView
        android:id="@+id/user_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="1dp" />
    
</LinearLayout>

 
Paso 4: crea otro archivo de diseño

Vaya a aplicación > res > diseño > haga clic con el botón derecho en > Nuevo > Archivo de recursos de diseño y nombre el archivo como list_row. El archivo list_row.xml se usa para mostrar los datos en ListView . lista_fila.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dip">
  
    <!--TextView to display the name 
        from the userdetails file-->
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17dp"
        android:textStyle="bold" />
  
    <!--TextView to display the designation 
        from the userdetails file-->
    <TextView
        android:id="@+id/designation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_marginTop="7dp"
        android:textColor="#343434"
        android:textSize="14dp" />
  
</RelativeLayout>

Paso 5: trabajar con el archivo MainActivity.kt

Finalmente, vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del  archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

import android.os.Bundle
import android.widget.ListAdapter
import android.widget.ListView
import android.widget.SimpleAdapter
import androidx.appcompat.app.AppCompatActivity
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import org.xmlpull.v1.XmlPullParserFactory
import java.io.IOException
import java.util.*
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        try {
              
            // creating a user list string hash map arraylist
            val userList = ArrayList<HashMap<String, String?>>()
  
            // creating a user string hashmap
            var user = HashMap<String, String?>()
  
            // declaring the list view from the layout file
            val lv = findViewById<ListView>(R.id.user_list)
  
            // input stream the userdetails.xml file
            val istream = assets.open("userdetails.xml")
  
            //creating a XmlPull parse Factory instance
            val parserFactory = XmlPullParserFactory.newInstance()
            val parser = parserFactory.newPullParser()
  
            // setting the namespaces feature to false
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
  
            // setting the input to the parser
            parser.setInput(istream, null)
  
            // working with the input stream
            var tag: String? = ""
            var text: String? = ""
            var event = parser.eventType
            while (event != XmlPullParser.END_DOCUMENT) {
                tag = parser.name
                when (event) {
                    XmlPullParser.START_TAG -> if (tag == "user") user = HashMap()
                    XmlPullParser.TEXT -> text = parser.text
                    XmlPullParser.END_TAG -> when (tag) {
                        "name" -> user["name"] = text
                        "designation" -> user["designation"] = text
                        "user" -> userList.add(user)
                    }
                }
                event = parser.next()
            }
  
            // List Adapter to broadcast the information to the list_rows.xml file
            val adapter: ListAdapter = SimpleAdapter(this, userList, R.layout.list_row,
                arrayOf("name", "designation"), intArrayOf(R.id.name, R.id.designation)
            )
            lv.adapter = adapter
        } catch (e: IOException) {
            e.printStackTrace()
        } catch (e: XmlPullParserException) {
            e.printStackTrace()
        }
    }
}

Salida: ejecutar en el emulador

Output

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *