Skip to content

Commit 0a0d600

Browse files
authored
Merge pull request mouredev#2532 from Dan-Corbo/main
#12 - JavaScript
2 parents a50cc18 + a698561 commit 0a0d600

File tree

1 file changed

+204
-0
lines changed

1 file changed

+204
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
/*
2+
* IMPORTANTE: Sólo debes subir el fichero de código como parte del ejercicio.
3+
*
4+
* EJERCICIO:
5+
* Desarrolla un programa capaz de crear un archivo XML y JSON que guarde los
6+
* siguientes datos (haciendo uso de la sintaxis correcta en cada caso):
7+
* - Nombre
8+
* - Edad
9+
* - Fecha de nacimiento
10+
* - Listado de lenguajes de programación
11+
* Muestra el contenido de los archivos.
12+
* Borra los archivos.
13+
*
14+
* DIFICULTAD EXTRA (opcional):
15+
* Utilizando la lógica de creación de los archivos anteriores, crea un
16+
* programa capaz de leer y transformar en una misma clase custom de tu
17+
* lenguaje los datos almacenados en el XML y el JSON.
18+
* Borra los archivos.
19+
*/
20+
21+
22+
/* Solucion */
23+
24+
// Importamos el módulo 'fs' para manejar archivos en Node.js
25+
const fs = require('fs');
26+
27+
// Función para crear un perfil con los datos proporcionados
28+
function crearPerfil(nombre, edad, nacimiento, lenguajes) {
29+
// Definición de la clase Perfil
30+
class Perfil {
31+
constructor(nombre, edad, nacimiento, lenguajes) {
32+
this.nombre = nombre;
33+
this.edad = edad;
34+
this.nacimiento = nacimiento;
35+
this.lenguajes = lenguajes;
36+
}
37+
}
38+
39+
// Creamos y retornamos una nueva instancia de Perfil con los datos proporcionados
40+
return new Perfil(nombre, edad, nacimiento, lenguajes);
41+
}
42+
43+
// Función para mostrar la información del perfil
44+
function mostrarPerfil(variable) {
45+
// Formateamos los lenguajes en una cadena legible
46+
let elemento = "";
47+
if (variable.lenguajes.length === 1) {
48+
elemento = variable.lenguajes[0];
49+
} else if (variable.lenguajes.length === 2) {
50+
elemento = `${variable.lenguajes[0]} y ${variable.lenguajes[1]}`;
51+
} else {
52+
for (let i = 0; i < variable.lenguajes.length - 1; i++) {
53+
elemento += `${variable.lenguajes[i]}, `;
54+
}
55+
elemento += `y ${variable.lenguajes[variable.lenguajes.length - 1]}`;
56+
}
57+
58+
// Construimos y retornamos la información del perfil formateada
59+
let mostrar = `
60+
Mi nombre es ${variable.nombre}, tengo ${variable.edad} años,
61+
nací el ${variable.nacimiento} y los lenguajes que conozco
62+
son ${elemento}.`;
63+
64+
return mostrar;
65+
}
66+
67+
// Función para convertir un objeto Perfil a formato XML
68+
function convertirAXml(objeto) {
69+
let xml = '<?xml version="1.0" encoding="UTF-8"?>\n';
70+
xml += '<persona>\n';
71+
xml += '\t<nombre>' + objeto.nombre + '</nombre>\n';
72+
xml += '\t<edad>' + objeto.edad + '</edad>\n';
73+
xml += '\t<nacimiento>' + objeto.nacimiento + '</nacimiento>\n';
74+
xml += '\t<lenguajes>\n';
75+
// Iteramos sobre los lenguajes para añadirlos al XML
76+
objeto.lenguajes.forEach(lenguaje => {
77+
xml += `\t\t<lenguaje>${lenguaje}</lenguaje>\n`;
78+
});
79+
xml += '\t</lenguajes>\n';
80+
xml += '</persona>';
81+
return xml;
82+
}
83+
84+
// Creamos un perfil de ejemplo
85+
let perfil = crearPerfil("Daniel", 24, "23/10/1999", ["Javascript", "Python", "Java", "C++", "Kotlin"]);
86+
87+
// Convertir el objeto a XML e Imprimirlo
88+
const xmlData = convertirAXml(perfil);
89+
console.log(`Archivo XML: \n${xmlData}\n`);
90+
91+
// Guardar archivo XML
92+
fs.writeFile('perfil.xml', xmlData, (err) => {
93+
if (err) throw err;
94+
console.log('Archivo XML guardado correctamente.');
95+
});
96+
97+
// Convertir el objeto a JSON e Imprimirlo
98+
const jsonData = JSON.stringify(perfil);
99+
console.log(`Archivo JSON: \n${jsonData}\n`);
100+
fs.writeFile('perfil.json', jsonData, (err) => {
101+
if (err) throw err;
102+
console.log('Archivo JSON guardado correctamente.');
103+
});
104+
105+
// Mostrar la información del perfil
106+
console.log(`Perfil:${mostrarPerfil(perfil)}\n`);
107+
108+
109+
// Borrar los archivos
110+
fs.unlink('perfil.xml', (err) => {
111+
if (err) throw err;
112+
console.log('Archivo XML eliminado correctamente.');
113+
});
114+
115+
fs.unlink('perfil.json', (err) => {
116+
if (err) throw err;
117+
console.log('Archivo JSON eliminado correctamente.');
118+
});
119+
120+
121+
/* Extra - Opcional */
122+
123+
//Requiere Node.Js para funcionar
124+
125+
// Definir la clase custom
126+
/*class Perfil {
127+
constructor(nombre, edad, nacimiento, lenguajes) {
128+
this.nombre = nombre;
129+
this.edad = edad;
130+
this.nacimiento = nacimiento;
131+
this.lenguajes = lenguajes;
132+
}
133+
134+
// Método para mostrar la información del perfil
135+
mostrarPerfil() {
136+
let elemento = "";
137+
// Formatear los lenguajes en una cadena legible
138+
if (this.lenguajes.length === 1) {
139+
elemento = this.lenguajes[0];
140+
} else if (this.lenguajes.length === 2) {
141+
elemento = `${this.lenguajes[0]} y ${this.lenguajes[1]}`;
142+
} else {
143+
for (let i = 0; i < this.lenguajes.length - 1; i++) {
144+
elemento += `${this.lenguajes[i]}, `;
145+
}
146+
elemento += `y ${this.lenguajes[this.lenguajes.length - 1]}`;
147+
}
148+
149+
// Construir y retornar la información del perfil formateada
150+
let mostrar = `
151+
Mi nombre es ${this.nombre}, tengo ${this.edad} años,
152+
nací el ${this.nacimiento} y los lenguajes que conozco
153+
son ${elemento}.`;
154+
155+
return mostrar;
156+
}
157+
}
158+
159+
// Función para leer el archivo XML y transformarlo en un objeto Perfil
160+
function leerXml(filePath) {
161+
// Leer el contenido del archivo XML
162+
const data = fs.readFileSync(filePath, 'utf-8');
163+
164+
// Analizar el XML utilizando el módulo xml2js
165+
const parseString = require('xml2js').parseString;
166+
let parsedData;
167+
parseString(data, (err, result) => {
168+
if (err) throw err;
169+
parsedData = result.persona;
170+
});
171+
172+
// Extraer los datos del objeto XML y crear un nuevo objeto Perfil
173+
const nombre = parsedData.nombre[0];
174+
const edad = parseInt(parsedData.edad[0]);
175+
const nacimiento = parsedData.nacimiento[0];
176+
const lenguajes = parsedData.lenguajes[0].lenguaje;
177+
178+
return new Perfil(nombre, edad, nacimiento, lenguajes);
179+
}
180+
181+
// Función para leer el archivo JSON y transformarlo en un objeto Perfil
182+
function leerJson(filePath) {
183+
// Leer el contenido del archivo JSON
184+
const data = fs.readFileSync(filePath, 'utf-8');
185+
186+
// Parsear el JSON y crear un nuevo objeto Perfil
187+
const jsonData = JSON.parse(data);
188+
return new Perfil(jsonData.nombre, jsonData.edad, jsonData.nacimiento, jsonData.lenguajes);
189+
}
190+
191+
// Ruta de los archivos XML y JSON
192+
const xmlFilePath = 'perfil.xml';
193+
const jsonFilePath = 'perfil.json';
194+
195+
// Leer archivos y crear objetos Perfil
196+
const perfilFromXml = leerXml(xmlFilePath);
197+
const perfilFromJson = leerJson(jsonFilePath);
198+
199+
// Mostrar la información de los perfiles
200+
console.log("Perfil desde XML:");
201+
console.log(perfilFromXml.mostrarPerfil());
202+
203+
console.log("\nPerfil desde JSON:");
204+
console.log(perfilFromJson.mostrarPerfil());*/

0 commit comments

Comments
 (0)