Hoy vamos a aprender cómo podemos cargar un fichero XML dentro de nuestro proyecto React para mostrar los datos.

Lo primero que vamos a hacer es instalar la librería necesaria, en este caso usaremos xml2js
npm install xlsx
Una vez instalado vamos a crear el componente que se encargará de cargar nuestro fichero XML.
XMLLoader.js
// xmlLoader.js
import parseString from 'xml2js';
async function loadXMLFile(filePath) {
try {
const response = await fetch(filePath);
const xmlText = await response.text();
const xmlObject = await parseXML(xmlText);
return xmlObject;
} catch (error) {
console.error('Error loading XML file:', error);
throw error;
}
}
function parseXML(xmlText) {
return new Promise((resolve, reject) => {
parseString(xmlText, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
export default loadXMLFile;
En TypeScript:
// xmlLoader.ts
import { parseString } from 'xml2js';
async function loadXMLFile(filePath: string): Promise<any> {
try {
const response = await fetch(filePath);
const xmlText = await response.text();
const xmlObject = await parseXML(xmlText);
return xmlObject;
} catch (error) {
console.error('Error loading XML file:', error);
throw error;
}
}
function parseXML(xmlText: string): Promise<any> {
return new Promise((resolve, reject) => {
parseString(xmlText, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
export default loadXMLFile;
Explicación:
loadXMLFile: Esta función utilizafetchpara obtener el contenido del archivo XML y luego llama aparseXMLpara analizar ese contenido y devolverlo como un objeto JavaScript.parseXML: Esta función utiliza la bibliotecaxml2jspara convertir el texto XML en un objeto JavaScript.
Y para utilizarlo haremos lo siguiente:
Por supuesto, dividiré el punto 3 en secciones más pequeñas y explicaré cada paso:
Importar las dependencias y el archivo xmlLoader
// TuComponente.tsx
import React, { useEffect, useState } from 'react';
import loadXMLFile from './xmlLoader';
Explicación:
- Importamos las dependencias necesarias (
React,useEffect,useState) y la funciónloadXMLFileque creamos previamente.
Definir el componente y el estado:
function TuComponente() {
// Estado para almacenar los datos XML después de la carga
const [xmlData, setXmlData] = useState<any>(null);
Explicación:
- Creamos un componente funcional llamado
TuComponente. - Utilizamos el hook
useStatepara definir un estado llamadoxmlData, que almacenará los datos XML después de la carga. Inicialmente, se establece ennull.
Usar el hook useEffect para cargar el XML al montar el componente:
useEffect(() => {
async function fetchData() {
try {
// Llamar a la función para cargar el archivo XML
const result = await loadXMLFile('ruta/al/archivo.xml');
setXmlData(result);
} catch (error) {
// Manejar errores, por ejemplo, mostrar un mensaje de error al usuario
console.error('Error loading XML file:', error);
}
}
// Llamar a la función de carga de datos al montar el componente
fetchData();
}, []); // El segundo argumento del useEffect asegura que solo se ejecute una vez al montar el componente
Explicación:
- Utilizamos el hook
useEffectpara realizar efectos secundarios en el componente, como cargar el archivo XML. - Dentro de
useEffect, definimos una función asíncrona llamadafetchData. fetchDatallama a la funciónloadXMLFilepara cargar el archivo XML y actualiza el estado con los datos obtenidos.- Cualquier error durante la carga se maneja en el bloque
catch.
Mostrar un mensaje de carga si los datos aún no se han cargado
if (!xmlData) {
return <div>Cargando...</div>;
}
Explicación:
- Verificamos si los datos XML aún no se han cargado (
xmlDataesnull). - Si es así, mostramos un mensaje de carga. Esto evita que se renderice el resto del componente antes de que los datos estén listos.
Hacer algo con los datos XML (opcional):
// Hacer algo con los datos XML, por ejemplo, imprimirlos en la consola
console.log(xmlData);
// Renderizar los datos XML en tu componente (puedes personalizar esto según tus necesidades)
return (
<div>
{/* Renderizar los datos XML en tu componente */}
</div>
);
}
export default TuComponente;
Explicación:
- En este paso, mostramos los datos XML en la consola utilizando
console.log(xmlData). Puedes realizar cualquier operación que necesites con los datos aquí. - Luego, puedes personalizar la parte de retorno (
return) para renderizar los datos XML en tu componente según tus necesidades específicas.
El código completo sería:
// TuComponente.tsx
import React, { useEffect, useState } from 'react';
import loadXMLFile from './xmlLoader';
function TuComponente() {
// Estado para almacenar los datos XML después de la carga
const [xmlData, setXmlData] = useState<any>(null);
// Efecto para cargar el archivo XML al montar el componente
useEffect(() => {
async function fetchData() {
try {
// Llamar a la función para cargar el archivo XML
const result = await loadXMLFile('ruta/al/archivo.xml');
setXmlData(result);
} catch (error) {
// Manejar errores, por ejemplo, mostrar un mensaje de error al usuario
console.error('Error loading XML file:', error);
}
}
// Llamar a la función de carga de datos
fetchData();
}, []); // El segundo argumento del useEffect asegura que solo se ejecute una vez al montar el componente
// Mostrar un mensaje de carga si los datos XML aún no se han cargado
if (!xmlData) {
return <div>Cargando...</div>;
}
// Hacer algo con los datos XML, por ejemplo, imprimirlos en la consola
console.log(xmlData);
// Renderizar los datos XML en tu componente
return (
<div>
{/* Renderizar los datos XML en tu componente */}
</div>
);
}
export default TuComponente;

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.