El analizador Android DOM (Document Object Model) es un programa que analiza un documento XML y extrae la información requerida de él. Este analizador utiliza un enfoque basado en objetos para crear y analizar los archivos XML. En general, un analizador DOM carga el archivo XML en la memoria de Android para analizar el documento XML. Esto da como resultado un mayor consumo de memoria. El documento se analiza a través de todos los Nodes posibles en el archivo XML. 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 una vista de lista.
- En el programa Principal, llamamos al archivo de información (en la carpeta de activos) desde la carpeta de activos, y esto se proporciona como un flujo de entrada.
- Usando un DocumentBuilderFactory , crearíamos una nueva instancia.
- Usando un DocumentBuilder , generamos un nuevo generador de documentos.
- Usando un método Document , analizamos el flujo de entrada .
- Como la información está en forma de Nodes, crearíamos una lista de Nodes e iteraríamos a través de cada Node usando un bucle FOR .
- La información específica se extraería en este ciclo y se agregaría a una lista (declarada anteriormente en el código).
- Con un ListAdapter , los datos se transmiten al archivo de diseño de vista de lista.
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 information.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 information.xml . A continuación se muestra el código para el archivo information.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <users> <user> <name>Steve</name> <designation>Apple</designation> </user> <user> <name>Sundar</name> <designation>Google</designation> </user> <user> <name>Jeff</name> <designation>Amazon</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"> <!--ListView to display the list--> <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 name node--> <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 designation node--> <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.w3c.dom.Document import org.w3c.dom.Element import org.w3c.dom.Node import org.w3c.dom.NodeList import org.xml.sax.SAXException import java.io.IOException import java.io.InputStream import javax.xml.parsers.DocumentBuilder import javax.xml.parsers.DocumentBuilderFactory import javax.xml.parsers.ParserConfigurationException open class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Try and Catch for avoiding the application to crash try { // This list will contain the data from the information.xml file val userList: ArrayList<HashMap<String, String?>> = ArrayList() // This listView will display the data from the information.xml file val lv = findViewById<ListView>(R.id.user_list) // The information.xml file will be taken in the form of input stream val istream: InputStream = assets.open("information.xml") // Steps to convert this input stream into a list val builderFactory: DocumentBuilderFactory = DocumentBuilderFactory.newInstance() val docBuilder: DocumentBuilder = builderFactory.newDocumentBuilder() val doc: Document = docBuilder.parse(istream) val nList: NodeList = doc.getElementsByTagName("user") // Iterating through this list for (i in 0 until nList.length) { if (nList.item(0).nodeType === Node.ELEMENT_NODE) { val user: HashMap<String, String?> = HashMap() val elm: Element = nList.item(i) as Element user["name"] = getNodeValue("name", elm) user["designation"] = getNodeValue("designation", elm) userList.add(user) } } // Using Adapter to broadcast the information extracted 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() } } // A function to get the node value while parsing private fun getNodeValue(tag: String?, element: Element): String? { val nodeList = element.getElementsByTagName(tag) val node = nodeList.item(0) if (node != null) { if (node.hasChildNodes()) { val child = node.firstChild while (child != null) { if (child.nodeType == Node.TEXT_NODE) { return child.nodeValue } } } } // Returns nothing if nothing was found return "" } }
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