En general, XML (Lenguaje de marcado extensible) es un formato de intercambio de datos de uso común para intercambiar datos de servidores. En Android, SAX significa API simple para XML y es una API ampliamente utilizada para el análisis de XML. Al igual que el analizador DOM, el analizador SAX también se usa para realizar operaciones en memoria para analizar el documento XML, pero consume menos memoria que el analizador DOM. La principal ventaja de un analizador SAX sobre un analizador DOM es que se puede indicar al analizador SAX que se detenga a la mitad de un documento sin perder los datos recopilados. El archivo XML que contiene la información a extraer incluye los siguientes cuatro componentes principales:
- Prólogo: el archivo XML comenzará con un prólogo. Prolog contiene la información sobre un archivo, que está disponible en la primera línea.
- Eventos: los eventos como el inicio y el final del documento, el inicio y el final de la etiqueta, etc. están contenidos en el archivo XML
- Texto: es un texto simple presente entre los elementos de la etiqueta XML de apertura y cierre.
- Atributos: Son las propiedades adicionales de una etiqueta presentes dentro de la etiqueta.
Análisis XML de otras dos formas. Por favor, consulte los siguientes artículos:
¿Qué vamos a hacer?
- Necesitamos tener un archivo XML con alguna información para poder hacer uno. Coloque este archivo en la carpeta de activos . Este archivo se llama y se analizará.
- Queremos mostrar estos datos en forma de lista para implementar un ListView .
- El analizador SAX examina un archivo XML carácter por carácter y traduce el archivo XML en una serie de eventos, como startElement() , endElement() y characters() .
- Un objeto ContentHandler procesará estos eventos para realizar la acción adecuada. El método parse() enviará los eventos al objeto de contenido para tratar con ellos.
- Cree una instancia de los objetos SAXParserFactory , SAXParser y DefaultHandler en aplicaciones de Android para leer y analizar los datos XML mediante el analizador SAX en Android.
- Usando un ListAdapter , los datos se envían a ListView donde se muestran en la pantalla.
Acercarse
Para analizar un archivo XML usando un analizador SAX en Android, siga 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.
Expanda hasta encontrar la carpeta principal, haga clic derecho sobre ella, vaya a Nuevo > Carpeta > Carpeta de activos
Luego simplemente haga clic en el botón Finalizar.
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
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.
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>Satya</name> <designation>CTO</designation> </user> <user> <name>Ajaypal</name> <designation>CEO</designation> </user> <user> <name>Mark</name> <designation>Consultant</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" > <!--A list View that will show the list elements--> <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 lista. El archivo list.xml se usa para mostrar los datos en ListView . lista.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 show the user name--> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="17dp" android:textStyle="bold" /> <!--TextView to show the user designation--> <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.view.View import android.widget.ListAdapter import android.widget.ListView import android.widget.SimpleAdapter import androidx.appcompat.app.AppCompatActivity import org.xml.sax.Attributes import org.xml.sax.SAXException import org.xml.sax.helpers.DefaultHandler import java.io.IOException import java.util.* import javax.xml.parsers.ParserConfigurationException import javax.xml.parsers.SAXParserFactory class MainActivity : AppCompatActivity() { // Create a userlist var userList = ArrayList<HashMap<String, String?>>() // create a user hashmap var user = HashMap<String, String?>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) try { // Declare the list view from the layout file val lv = findViewById<View>(R.id.user_list) as ListView // Creating and initializing an instance of SAX parser factory val parserFactory = SAXParserFactory.newInstance() val parser = parserFactory.newSAXParser() // Default handler val handler: DefaultHandler = object : DefaultHandler() { var currentValue = "" var currentElement = false // Start element function @Throws(SAXException::class) override fun startElement( uri: String, localName: String, qName: String, attributes: Attributes ) { currentElement = true currentValue = "" if (localName == "user") { user = HashMap() } } // End element function @Throws(SAXException::class) override fun endElement(uri: String, localName: String, qName: String) { currentElement = false when { localName.equals("name", ignoreCase = true) -> user["name"] = currentValue localName.equals("designation", ignoreCase = true) -> user["designation"] = currentValue localName.equals("user", ignoreCase = true) -> userList.add(user) } } // characters function @Throws(SAXException::class) override fun characters(ch: CharArray, start: Int, length: Int) { if (currentElement) { currentValue += String(ch, start, length) } } } // Feeding the userdetails.xml file as an Input stream val iStream = assets.open("userdetails.xml") parser.parse(iStream, handler) // Adapter to broadcast the information to the list val adapter: ListAdapter = SimpleAdapter(this, userList, R.layout.list, arrayOf("name", "designation"), intArrayOf(R.id.name, R.id.designation) ) lv.adapter = adapter } catch (e: IOException) { e.printStackTrace() } catch (e: ParserConfigurationException) { e.printStackTrace() } catch (e: SAXException) { e.printStackTrace() } } }
Salida: ejecutar en el emulador
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA