Saltar navegación

20251016 DOM_4 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 19 de octubre de 2025 por Raquel G.

13 visualizaciones

Descargar la transcripción

Pues venga 00:00:00
Nos vamos a eliminar libro por id 00:00:02
Que será otra vez 00:00:06
Vámonos a sacar 00:00:07
Todos los libros 00:00:08
Libro 00:00:14
Al final veis que se trata de hacer 00:00:20
Más o menos lo mismo una y otra vez 00:00:21
Pero antes de eso 00:00:23
Teniendo claro en la cabeza lo que queremos hacer 00:00:25
Que nodos nos interesa recorrer 00:00:28
Y que vamos a hacer con cada nodo 00:00:30
Si empezamos a programar 00:00:31
Sin tener antes en la cabeza 00:00:33
lo que queremos hacer pues 00:00:34
se nos complica y se nos han 00:00:36
pasado las dos horas del examen 00:00:38
porque 00:00:41
el examen tiene que resolver 00:00:42
seguramente ya lo dije 00:00:45
en su momento y lo vuelvo a decir 00:00:46
aquí tenéis 00:00:48
para mi examen tenéis todos los proyectos, todo lo que 00:00:49
traigáis en vuestro disco duro, en vuestro como 00:00:52
queráis trabajar 00:00:54
entonces no me vale que me digáis 00:00:55
jo, no me funciona, no 00:00:58
elimina esto, no recupera 00:01:00
esto, pero es que este 00:01:02
código está bien, valóramelo, sí, claro 00:01:04
está bien, está estupendo, vas copia y pegado de tu 00:01:06
proyecto, yo lo que valoro es que 00:01:08
resuelva, resuelva el requisito 00:01:10
que yo pido, aplicación 00:01:13
que elimine 00:01:15
no sé qué, que haga tal cosa 00:01:16
eso lo tiene que hacer, en los datos 00:01:18
tiene que eliminar 00:01:20
añadir lo que sea en los datos 00:01:22
que es lo que, nuestros exámenes son eso 00:01:24
gestionar datos, hacer el CRUD 00:01:26
de la base de datos, de los ficheros, de lo que sea 00:01:28
y eso lo tiene que hacer, si no lo hace 00:01:30
pues no se puede puntuar, porque 00:01:33
hombre, a menos que no lo haga 00:01:35
por alguna cosa 00:01:37
chorra, que sea 00:01:39
yo que sé, pero 00:01:41
no me pidáis que puntúe por 00:01:43
oye, es que este for está que te cagas 00:01:45
de bien hecho, claro que está que te cagas 00:01:47
si tenéis vuestros proyectos, copiar un 00:01:49
for que está que te cagas, es muy fácil 00:01:51
si no resuelve el asunto 00:01:53
luego, todo esto venía a cuento 00:01:55
de que 00:01:57
antes de hacer un código uno tiene que pensar 00:01:59
qué tiene que hacer, tiene que pensarlo 00:02:02
hacer un pequeño diseño en la cabeza 00:02:04
y cuando lo tiene claro ya se pone 00:02:06
a construirlo, no se pone a escribir 00:02:08
sin más, y ese construirlo 00:02:10
pues ya implicará muchas copias y pegas, claro que 00:02:11
los implicará, porque uno tiene en la cabeza todo 00:02:14
pero ya serán con criterio, porque uno ya tiene su diseño 00:02:15
en la cabeza claro, pues 00:02:18
entonces aquí, nuestro diseño es 00:02:20
cojo el listado de libros 00:02:22
lo recorro y para cada libro 00:02:24
si es el que tengo que eliminar 00:02:26
Me voy al padre y lo borro, porque aquí el que borra es el padre. Pues venga, tenemos ya los libros, recorremos y ahora aquí ya. ¿Este libro toca eliminarlo? Vale, pues aquí el parámetro de búsqueda es el id. El id es un atributo. 00:02:27
entonces 00:02:56
un atributo 00:02:58
no se saca como los nodos hijos 00:03:00
si yo eliminara por título 00:03:02
tendríamos que dentro del libro 00:03:04
hacer el getElementsByTagName 00:03:06
porque los nodos hijos 00:03:08
se sacan por getElementsByTagName 00:03:09
pero el nodo atributo se saca con otro método 00:03:12
que será 00:03:14
getAtributeCasiSeguro 00:03:15
pero vamos a ver si nos lo ofrece 00:03:18
vale, pues si mi libro 00:03:19
vamos a ponerlo aparte para que se vea mejor 00:03:24
Element libro igual a libros punto, uy, punto ítem i. 00:03:26
Y hacemos el casting. 00:03:41
Vale, pues si mi libro, su atributo, vale, es, eso, muy bien. 00:03:45
Su atributo llamado id 00:03:55
Su atributo llamado id 00:03:57
Es igual 00:04:01
Al id 00:04:05
Que me han pasado 00:04:07
Uy, que tonterías hago 00:04:09
Joder, ponte ahí 00:04:11
Ahora, equals id 00:04:15
Si es igual a ese id 00:04:20
Entonces, ¿qué tenemos que hacer ahí? 00:04:23
Irnos al padre 00:04:25
Claro, libro.id 00:04:27
get 00:04:29
a mi padre 00:04:31
y le pedimos a mi padre 00:04:33
que 00:04:35
me elimine 00:04:36
vale, está removiendo 00:04:39
borrando el nodo enterito 00:04:52
con todos sus hijos, el nodo entero 00:04:54
libro 00:04:56
no, estamos en el doc que está cargado en memoria 00:04:56
vale, lo borra 00:05:03
vamos a tener que mandar 00:05:05
el doc otra vez 00:05:07
antes no hemos necesitado hacerlo porque lo único que hacíamos era 00:05:08
consultar, pero ya estamos 00:05:11
tocando el árbol, si ese 00:05:13
árbol quiero que se refleje en el fichero, lo tengo 00:05:15
que escribir en el fichero, pero eso lo hago ahora 00:05:17
rápidamente y ya está, vale, entonces 00:05:19
aquí, bueno, este método 00:05:21
hemos puesto un boolean, porque como este no devuelve nada 00:05:23
pues aprovechamos y con el boolean 00:05:25
ponemos true o false, si 00:05:27
lo ha borrado o no lo ha borrado 00:05:30
normalmente los métodos que 00:05:32
en las propias colecciones 00:05:34
así ocurría, los métodos que eliminan 00:05:37
o añaden, añade una 00:05:39
lista, borrado una lista, tenían un 00:05:41
boolean de valor de retorno que te 00:05:43
confirmaba si realmente había 00:05:45
borrado algo o no había borrado nada 00:05:47
bueno, pues aquí ponemos ese boolean para seguir 00:05:49
un poco ese patrón, entonces 00:05:51
aquí podemos aprovechar 00:05:53
aquí tendríamos un problema que 00:05:55
lo podríamos ver en un método de abajo 00:05:56
que 00:05:58
cuidado 00:06:00
por cuando borramos 00:06:01
en general, cuando 00:06:04
yo recorro una colección 00:06:07
la recorro 00:06:08
y lo que hago con los nodos 00:06:10
si procedes borrarlos 00:06:13
recordad que ahí rápidamente 00:06:15
se nos abre un warning rojo 00:06:17
de ostras, que cosa tan peligrosa 00:06:19
recorro y elimino 00:06:21
porque al eliminar cambia la longitud 00:06:23
de la lista, luego cuando el recorrido 00:06:25
avanza, la longitud ha cambiado 00:06:27
le puede salir un me salido 00:06:29
por mil cuestiones 00:06:30
entonces, esa es una situación 00:06:32
que nos genera problemas 00:06:35
el año pasado ya nos generaba problemas 00:06:37
porque si recorriamos 00:06:38
una colección con un for 00:06:40
si el elemento cumple esto, bórralo 00:06:41
pim, depende de donde 00:06:44
estaba el elemento, si estaba al principio o al final te salía 00:06:46
un error concurrente 00:06:48
entonces decíamos, cuidado 00:06:50
esa situación en general se dé cuando 00:06:52
se dé, recorrer 00:06:54
vale, esa situación en general 00:06:56
se dé cuando se dé 00:07:03
que es, yo recorro 00:07:05
recorro, recorro 00:07:07
y lo que hago dentro con esos elementos 00:07:08
a veces puede ser eliminarlos 00:07:11
eso cambiamos de patrón 00:07:12
y de hecho 00:07:16
las colecciones nos ofrecían 00:07:17
los iteradores, nos ofrecían alternativas 00:07:19
para poder hacer eso sin esta estructura 00:07:21
recorro, recorro 00:07:23
y lo que hago dentro de cada elemento 00:07:24
borrar si procede 00:07:26
entonces aquí tenemos esa situación 00:07:28
que no nos gusta nada 00:07:31
no nos gusta nada 00:07:32
si diera la casualidad de que el libro 00:07:34
es el último, pues no pasaría nada 00:07:37
porque ya este forno volvería a entrar 00:07:39
pero si está entre medias puede que pase 00:07:41
pero aquí tenemos suerte 00:07:43
aquí tenemos suerte porque estamos 00:07:45
borrando por clave primaria 00:07:47
entonces 00:07:49
en cuanto lleguemos al libro a borrar 00:07:51
como es la clave primaria, esos son los requisitos 00:07:53
del modelo que me han dado, yo ya puedo decir 00:07:55
ya está, ya no sigo recorriendo 00:07:58
entonces me ahorro 00:07:59
el tener que trabajar de otra manera 00:08:01
porque yo podría hacer aquí, como 00:08:03
Rosa no está y no me ve 00:08:05
pues yo podría hacer aquí 00:08:07
un return true 00:08:09
y me quedo 00:08:10
tan tranquila 00:08:12
¿vale? 00:08:13
entonces aquí no tengo que inventarme un patrón 00:08:16
distinto para hacer el borrado 00:08:18
dentro de colección 00:08:20
porque en cuanto he borrado 00:08:21
el que tiene su ID 00:08:24
me pido 00:08:26
y así ya juego con este boolean 00:08:27
si he eliminado de forma efectiva 00:08:31
algo aviso 00:08:32
y si me vengo aquí es porque no elimine 00:08:33
nada de forma efectiva 00:08:36
entonces me avisa con un falso 00:08:37
Entonces, yo ya sé. 00:08:39
Venga, pues ya hemos. 00:08:42
Sí, claro. 00:08:44
Si quisieras borrar por el título, igual, no pasa nada. 00:08:45
Lo que pasa es que esta condición sería libro.getLMSByTagName 00:08:49
título.item0.getTextContent. 00:08:54
Se quedaría un poquito más grande que getAttribute, ¿vale? 00:08:57
Vale, entonces, eliminar por libro. 00:09:02
Pues ya está, ya sabemos cómo borrar. 00:09:05
Me tengo que colocar en el padre, ¿cómo? 00:09:08
pues ya es un tema de programación, ya cada uno 00:09:09
programa como le guste 00:09:11
me coloco en el padre y el padre elimina al hijo 00:09:13
y recordad 00:09:15
eso que nos hace tanto daño 00:09:17
recorrer cosas para 00:09:19
adentro decidir que borramos 00:09:21
eso pase en el contexto en el que pase 00:09:23
lo evitemos, evitémoslo 00:09:25
porque a veces puede ir 00:09:27
y a veces no, tú haces una prueba 00:09:29
te vas, le das al jefe, hace la siguiente prueba 00:09:31
no le va, y ya hemos liado 00:09:33
vale, entonces lo borramos 00:09:35
vamos a 00:09:37
aquí 00:09:39
eliminamos 00:09:39
id 2 00:09:47
por ejemplo 00:09:49
y ahora 00:09:50
gestión punto 00:09:54
esto se llamaba 00:10:02
eliminar libro 00:10:05
eliminar libro por id 00:10:07
esto era en string 00:10:11
lo meto en inciso para que me muestre 00:10:12
es true o false 00:10:15
en este caso me mostrará true porque el 2 existe 00:10:16
si le pasáramos el 3 me diría 00:10:19
falso, lógicamente, porque no ha borrado 00:10:21
nada 00:10:23
vale, pero, a ver 00:10:23
voy a ejecutarlo 00:10:27
para ver si no me sale ningún error y está 00:10:28
todo bien, pero en el xml no se va a enterar 00:10:31
lo va a haber borrado en el doc, solo 00:10:33
nos va a faltar guardar el xml 00:10:35
entonces, vamos a hacer la 00:10:37
primera prueba 00:10:39
solo para ver si 00:10:40
parece que ha eliminado, pero 00:10:42
mi este fichero no se ha enterado de nada 00:10:48
mi id2, que era este 00:10:50
aquí sigue 00:10:52
Claro, porque esta modificación 00:10:53
Esta modificación de aquí 00:10:56
Se ha hecho 00:11:00
Solo en el doc 00:11:01
Ahora tenemos que pasar el doc 00:11:02
Al fichero, bueno pues no pasa nada 00:11:05
Vamos a hacernos un método 00:11:07
Actualizar 00:11:09
Fichero 00:11:12
Con esas sentencias de código 00:11:14
Que al final vienen a ser copia y pega 00:11:17
Que pasan un doc 00:11:19
Al fichero 00:11:21
Como la variable doc y el fichero 00:11:22
Son variables globales 00:11:24
De aquí arriba y de aquí clase 00:11:27
No se las tengo que pasar 00:11:28
Pues venga, actualizar fichero 00:11:29
Vamos a 00:11:32
Crear este método 00:11:35
Actualizar fichero 00:11:37
Vamos a ver 00:11:40
No, esto 00:11:43
Sí, estos son transformers 00:11:46
No creo que me acuerde 00:11:51
Miraré la chuleta 00:11:57
Pero voy a intentarlo 00:11:59
.newinstance 00:12:00
Vale 00:12:07
Esta es la fábrica de Transformer 00:12:08
Que transforman 00:12:10
Como su propio nombre dice 00:12:13
Que está 00:12:14
Si veis los sim porque os importe 00:12:16
Está pues aquí en Java 00:12:18
XMM patatín 00:12:22
Transformer factory 00:12:23
Esta es la factoría de transformers 00:12:26
La factoría de transformer 00:12:28
Me va a permitir 00:12:31
Generar ya un transformer 00:12:32
Para hacer la transformación 00:12:34
De doc al fichero 00:12:37
Transformer generator 00:12:38
El trece punto 00:12:40
Con 00:12:43
New transformer 00:12:45
Imagino 00:12:46
New transformer 00:12:47
Vale 00:12:51
Y ahora 00:12:53
ahora este tendrá una excepción 00:13:02
lógicamente 00:13:04
porque son dos objetos distintos 00:13:05
este es el que va a hacer la transformación 00:13:15
y esta es la factoría para generar este 00:13:17
claro, es porque sigue el patrón factoría 00:13:20
esto, y ahora 00:13:24
vale, entonces 00:13:26
para que el fichero de salida 00:13:31
nos quede indentado y nos quede bonito 00:13:32
Hay que fijar algunas propiedades básicas 00:13:35
Entonces 00:13:37
En particular hay que fijar 00:13:38
Una propiedad que es la 00:13:40
Los índices 00:13:43
Esta ya si que no me acuerdo 00:13:45
Esta propiedad como se llamaba 00:13:46
¿Y si no te acuerdas no pasó? 00:13:49
¿Eh? 00:13:51
No, si porque 00:13:54
Luego te lo encuentras en la cama 00:13:55
Entonces si pasó 00:14:00
A ver 00:14:01
Vamos a ver 00:14:02
Esta es la propiedad 00:14:06
vale 00:14:08
entonces esta fija 00:14:19
al transformador este 00:14:22
al transformer le puedes fijar 00:14:24
formas de funcionar 00:14:26
la única que nos interesa 00:14:28
es que te indente 00:14:30
el fichero, que haga 00:14:32
indexados, que indexe, perdón 00:14:34
te indente 00:14:36
es que tenías otra 00:14:37
pasamos 00:14:39
y ahora ya vamos a transformar 00:14:41
tr.transform 00:14:43
y ahora 00:14:45
Transformamos 00:14:47
Nuestro documento 00:14:49
A nuestro 00:14:51
Fichero 00:14:53
Que se llamaba 00:14:53
Fichero 00:14:56
Vale 00:14:59
Lo que pasa es que 00:15:00
Aquí no, creo que no hay que 00:15:01
Si, no, aquí no va en file 00:15:04
Aquí va en input string 00:15:06
Creo 00:15:08
Result va en input string 00:15:09
Estoy casi segura 00:15:13
Pero vamos a comprobarlo aquí 00:15:15
Ah, va en una instancia de result 00:15:17
Vale, entonces construimos primero 00:15:19
Aquí, vale, todo esto 00:15:21
Que me quería yo saltar pasos 00:15:23
Vale, me quería yo 00:15:26
Saltar pasos, no 00:15:27
Así 00:15:29
Sí, sí, tranquilos 00:15:32
Que lo dejo, y ya está, esto luego es copiar 00:15:37
Y pegar, copiar y pegar 00:15:39
Y aquí voy a añadir la 00:15:40
Trans, tr, esto es tr 00:15:42
Ahora voy, ahora voy, ahora voy, espera que lo deje bonito 00:15:44
Vale 00:15:47
Vale, pasos a hacer 00:15:48
crear el transformer 00:15:51
que se hace con la factoría 00:15:53
al transformer le diremos que 00:15:55
funcione indexando para que 00:15:57
el xml quede bonito, no quede todo así 00:15:59
tan feo 00:16:01
y ahora ya vamos a llamar al 00:16:02
transform para que transforme 00:16:05
mi doc en mi 00:16:07
fichero, pero el doc y el fichero 00:16:09
no se pasan tal cual 00:16:11
el doc se tiene que pasar en 00:16:12
formato doc source 00:16:15
y el 00:16:17
fichero se tiene que pasar en 00:16:20
formato stream result, por eso 00:16:21
lo instanciamos así 00:16:23
y entonces, a ver, porque es 00:16:24
como 00:16:27
y este se llama, como se llamaba 00:16:28
nuestro fichero, fichero era 00:16:31
00:16:33
y esto ahora ya sí que me puede dar otra excepción 00:16:34
¿no? 00:16:37
¿y lo de gestor biblioteca DOM? 00:16:37
¿qué es gestor biblioteca DOM? 00:16:42
¿de dónde sacaste la? 00:16:45
¿de dónde lo saqué? de mi chuleta 00:16:48
y ahora esto se convierte en tu chuleta 00:16:49
ahora esto se convertiría en la tuya 00:16:51
de la que tú copiarás y pegarás cuando 00:16:55
necesites hacer esto, a ver, que si te quieres 00:16:57
aprender esto de memoria, vale, yo he llegado hasta aquí 00:16:59
pero tú tienes más memoria 00:17:01
que yo 00:17:03
Juan José Ballesta 00:17:03
ah, perdón 00:17:12
ese es otro 00:17:14
Es que te pareces mucho 00:17:16
Que sí 00:17:29
Que esta propiedad se ponga yes 00:17:31
O sea, esta es la propiedad 00:17:34
Indexar 00:17:36
La puedes poner a yes o a no 00:17:37
Si la pones a no, no te indexa 00:17:39
Con lo cual te va a salir el pitcher XML muy feo 00:17:41
Y como esta propiedad tiene otras 00:17:43
Pero bueno, esta es la básica 00:17:46
Claro, para que te aparezcan tabuladores en los nodos 00:17:47
Que al XML le da igual 00:17:52
Pero al que lo ve con los ojos 00:17:54
Dime 00:17:56
Sí, a ver 00:17:57
El transformer 00:18:02
Parte del doc 00:18:04
Y se va al fichero 00:18:06
Pero este método 00:18:07
Lo necesita en otro formato 00:18:09
No en formato doc 00:18:11
Árbol doc ni en formato file 00:18:14
hay que convertirlo a 00:18:15
una fuente de DOM 00:18:17
y este hay que convertirlo a un flujo 00:18:19
a un stream 00:18:23
pues para convertirlo a una fuente 00:18:23
de DOM, pues lo conviertes así 00:18:26
y para convertirlo a un flujo, lo conviertes así 00:18:27
y eso es porque la librería DOM 00:18:29
lo tiene así diseñado 00:18:31
no es una decisión nuestra 00:18:34
¿vale? 00:18:36
entonces tú entiendes más o menos 00:18:38
de qué va y respetas sus reglas 00:18:39
sus reglas honestas 00:18:41
te lo dejas y luego ya 00:18:42
Sí, sí, sí, este es nuestro 00:18:44
Algo en dos y este es nuestro fichero 00:18:47
Lo que pasa es que no se los podemos pasar así directamente 00:18:49
Se los pasamos transformados 00:18:51
Ya, sí 00:18:53
Vale 00:18:57
Vale, ala 00:19:00
No le digas eso 00:19:05
Hombre, qué feo eso 00:19:07
Ha sido solo para contestarle a él 00:19:09
vale, entonces ahora ya nos vamos 00:19:14
a nuestro main, vamos a ver ahora ya 00:19:16
si ahora ya sí que nos elimina 00:19:18
el 2, a ver si ahora ya lo vemos 00:19:19
en el fichero, vamos a ver 00:19:22
vale 00:19:30
el id2 00:19:32
lo he eliminado 00:19:34
id2 lo he eliminado, efectivamente 00:19:35
y lo que pasa es que nos mete 00:19:40
un montón de espacios 00:19:41
y yo creo que esto se quita, vamos a probarlo 00:19:43
haciendo antes 00:19:46
un método normalize 00:19:48
Te mete espacios 00:19:50
Queda muy feo a la vista 00:19:54
Pero bueno, a cualquier parser 00:19:56
Se la refanfinfla que tenga espacios o no 00:19:58
A cualquier parser de cualquier aplicación 00:20:00
Que tenga espacios o no le da lo mismo 00:20:03
Pero a la vista queda muy feo 00:20:04
Creo, creo, vamos a probarlo 00:20:05
Que si tú al doc 00:20:08
Antes de pasárselo 00:20:09
¿Dónde estamos aquí en actualizar? 00:20:11
¿Dónde estaba actualizar? 00:20:15
Jolines 00:20:16
Actualizar, ¿dónde está? 00:20:17
vale 00:20:20
creo que aquí si al doc 00:20:22
le hacemos esto 00:20:25
creo que 00:20:29
la normalización te elimina 00:20:33
te aglutina 00:20:35
espacios, creo que te hace 00:20:37
todas esas cosas y entonces puede 00:20:39
que ya no te lo genere, pero no estoy segura 00:20:41
vamos a probarlo 00:20:43
lo que pasa es que voy a 00:20:43
volver a ponerle 00:20:48
voy a eliminar el 1 00:20:49
Espera, voy a copiar el origen 00:20:51
Voy a volver a copiar el otro 00:20:54
Este 00:20:56
Ah, no, este es este 00:20:59
Este de aquí 00:21:08
Voy a recuperar el original 00:21:09
Pero habiéndolo modificado 00:21:12
Desde aplicación el control Z funciona 00:21:19
Vale, vale 00:21:21
Pues no lo había probado nunca 00:21:24
Vale, bueno, lo tengo aquí otra vez 00:21:26
Vale, vamos a ver 00:21:28
Ahora con el normalize 00:21:30
Si me lo hiciera, si me lo dejara más bonito 00:21:32
Pues no, no vale para nada 00:21:34
A ver, vamos a 00:21:44
Document 00:21:46
A ver, insertándole 00:21:47
Esto 00:21:53
A ver, insertándolo así 00:21:53
Entonces 00:21:58
Decís que si yo hago aquí un control Z 00:22:00
Uh, que cosa tan chula 00:22:02
Vale 00:22:04
Vale 00:22:05
Volvemos a 00:22:08
True 00:22:09
Pues no sé 00:22:11
Esto es tarea vuestra 00:22:14
¿Qué se puede hacer para que 00:22:16
Se le puede fijar 00:22:18
Alguna propiedad al transform 00:22:20
Seguramente 00:22:22
El transformer este 00:22:23
Le podamos fijar más propiedades 00:22:25
Sí, pero esa 00:22:27
Es para la codificación UTF-8 00:22:29
Pero es que ya lo tengo aquí en UTF-8 por defecto 00:22:32
Entonces creo que no vale para nada 00:22:33
Seguramente hay otra propiedad 00:22:34
Para que te quite esta 00:22:36
Morrallita 00:22:39
Pero es que no sé cuál es 00:22:41
Ni tengo internet para preguntárselo a nadie 00:22:43
Así que os queda como tarea 00:22:45
¿Eh? 00:22:47
No lo sé 00:22:49
Porque la wifi 00:22:51
Hoy no funciona la wifi 00:22:52
Qué ojo 00:23:02
Pero qué más te da 00:23:12
Mi contraseña, si tú tienes la tuya de Duca Madrid 00:23:14
Que vale para lo mismo 00:23:17
Claro 00:23:17
Ah, pues mirad 00:23:19
Sí que 00:23:22
Ya sí que tengo wifi 00:23:23
A ver 00:23:25
00:23:27
Vamos a ver si se entera 00:23:29
Cuando 00:23:32
Se lo preguntamos una vez 00:23:33
Y sí 00:23:35
Uy, cuando hago el transform de doc a fichero transformer de apidon, 00:23:37
Me crea el fichero 00:23:55
Con un montón 00:23:59
De saltos de línea feos 00:24:02
Para que no lo haga 00:24:07
Vamos a ver si lo sabe 00:24:21
No le he dicho ni quejaba ni que nada 00:24:25
Ah, vale, ya lo sabe 00:24:31
Yo la dejaba 00:24:32
Vale 00:24:33
A ver, yo sí quiero saltos de línea 00:24:34
Ah, extra, vale, no quiero los extra 00:24:43
Vale 00:24:45
Desactivar indentación 00:24:46
Vale, la desactivamos 00:24:49
Pero, ah 00:24:51
Pero si yo la desactivo me sale todo seguido 00:24:53
Y una 00:24:55
Vale, esto ya lo hemos hecho 00:24:57
Y no hemos insertado text nodes 00:25:02
A ver 00:25:05
Vale, a ver 00:25:07
Si le ponemos que no indente, todo es una sola línea 00:25:16
Tampoco lo queremos 00:25:18
Bueno, no, no se ha resuelto nada 00:25:19
Eh, alguna 00:25:25
Si quito la indentación 00:25:28
Pues es que sea una línea 00:25:30
Y no lo quiero en una sola línea 00:25:31
Bueno, no nos importa 00:25:32
Y al que le importe, que lo busque 00:25:34
Y si lo averigua, pues mira, esa curiosidad que tenemos 00:25:38
Pero a ver 00:25:40
No nos quita el sueño 00:25:41
Vale 00:25:43
Siguiente método 00:25:44
Vamos a devolverlo al que estaba 00:25:46
Que será añadir 00:25:49
Y ya más o menos tenemos completo 00:25:50
Todo lo que nos puede interesar hacer 00:25:52
Libros prestados a 00:25:54
Eliminar libros 00:26:00
Perdona, eso lo podéis hacer vosotros 00:26:02
Ah, el guardar era para actualizar 00:26:07
Vale, que lo tenía en blanco para eso 00:26:12
Pues fuera 00:26:15
Vale 00:26:15
Eliminar préstamos de un lector 00:26:17
Lo hacéis vosotros 00:26:22
Vale, genial 00:26:24
¿Lo leemos después de arrepiado? 00:26:26
No, porque es un I-59 00:26:29
Vamos a agregar un libro 00:26:31
Para ver cómo se agrega 00:26:33
Y lo demás podríais hacerlo también ya vosotros 00:26:34
Eso con alguna otra aplicación 00:26:36
Que os dé para practicar 00:26:39
Vale 00:26:40
¿Cómo se agrega un libro? Pues igual 00:26:42
El que quita la vida la da 00:26:44
Al nodo padre 00:26:46
O sea, creamos un nodo 00:26:49
Y al padre le decimos, oye, toma 00:26:50
Acógelo en tu seno 00:26:52
Y ya está, el padre lo acoge y se acabó 00:26:54
¿Vale? 00:26:56
¿Perdón? 00:26:59
Vamos a agregar un libro 00:27:02
Pues entonces hay que crear el nodo libro 00:27:04
¿Vale? Vamos a crear el nodo libro 00:27:06
Entonces 00:27:08
¿Cómo se crea un nuevo nodo? 00:27:09
Pues a través del document 00:27:14
Aquí hay un método que es 00:27:15
Create 00:27:17
No, no es create 00:27:19
Create, claro que es create 00:27:22
Porque me vacila 00:27:27
Vale 00:27:30
Vamos a crear 00:27:30
Un nuevo nodo libro 00:27:32
Vale 00:27:35
Un nuevo nodo libro 00:27:37
Este nodo libro 00:27:38
¿A quién irá? 00:27:42
Irá al nodo raíz 00:27:46
Entonces tenemos que sacarnos el nodo raíz 00:27:48
Para pegarle el nodo libro 00:27:52
Pero bueno, antes de pegarse al nodo raíz 00:27:54
Vamos a meterle sus hijos 00:27:56
Bueno, pues entonces el libro ya lo tenemos 00:27:58
Pero también queremos 00:28:02
Crear un elemento 00:28:04
Que sea el título 00:28:05
Vale 00:28:08
Y a título, ¿qué le queremos pegar? 00:28:13
Le queremos pegar un nodo texto 00:28:17
Con este nodo de aquí 00:28:19
Pues venga, vamos a crear 00:28:21
Se podría todo 00:28:23
Un nodo texto, efectivamente 00:28:28
Cuyo texto 00:28:31
Sea título 00:28:33
00:28:34
Pero bueno, esto se va haciendo en una línea 00:28:38
Y ahora ya 00:28:40
A este de aquí 00:28:42
A ver, yo estoy siendo muy lista 00:28:44
Pero no lo estoy guardando en ningún lado 00:28:46
Este es el nodo libro 00:28:47
Libro igual a este 00:28:49
Uy, que digo yo libro, perdón 00:28:51
Element 00:28:53
Element, ahora 00:28:54
Aquí lo mismo 00:28:56
Element 00:28:59
Título 00:29:01
Y aquí este será 00:29:02
Ahora 00:29:06
Yo por ahora lo estoy creando 00:29:08
Eso 00:29:10
Appenchild, habláis inglés casi igual que yo 00:29:12
Appenchild 00:29:15
Apencil 00:29:16
Este texto 00:29:17
Entonces 00:29:20
Texto, título 00:29:25
Lo estoy poniendo aparte para que 00:29:28
Este 00:29:30
Import text 00:29:31
Vale 00:29:34
Entonces text es un nodo 00:29:35
También 00:29:40
Pero es un nodo de tipo texto 00:29:40
También está en la jerarquía de element y de todo 00:29:43
Vamos a pegarle ya al título 00:29:45
Vamos a pegarle 00:29:48
Este 00:29:50
El título ya lo tenemos 00:29:52
Y ahora ya nosotros lo hacemos en la misma línea 00:29:54
Para que sea más 00:29:56
Vamos a crear 00:29:57
Estítulo, autor, género y año 00:30:00
Uff, que pesado 00:30:05
Pues venga 00:30:06
Element 00:30:11
Autor 00:30:13
Igualador 00:30:16
Punto, crear 00:30:17
Element 00:30:19
De autor 00:30:22
Y a este, ya que estamos 00:30:23
Ah, no, no lo puedo hacer una penchild 00:30:27
Porque lo tengo que hacer aparte 00:30:29
¿Por qué? ¿Por qué no puedes? 00:30:30
Porque a penchild no me devuelve 00:30:33
El propio honor de elemento 00:30:34
Bueno, igual está pensado para que te lo devuelva 00:30:36
Si está pensado para que te lo devuelva 00:30:38
Ah, sí, sí, sí 00:30:40
Ay, pues te ahorra trabajo, fenomenal 00:30:41
Vale, y a este 00:30:43
Le fijamos 00:30:45
append child 00:30:46
doc, ahora lo, espera, lo ponemos aquí abajo 00:30:50
doc.create 00:30:52
text 00:30:58
node, claro, create 00:31:00
text node, autor 00:31:02
vale, y este 00:31:04
te lo devuelve en node, pero 00:31:06
son node tu element 00:31:08
podré hacer un 00:31:10
bueno 00:31:12
estoy arriesgando mucho con tanto 00:31:14
sí, a ver, lo que, aquí 00:31:16
He creado el nodo texto 00:31:20
Se lo he puesto como hijo 00:31:22
A este nodo que acabo de crear 00:31:25
¿Verdad? 00:31:27
O sea, el nodo texto 00:31:29
Y ahora, este método 00:31:30
Tiene la particularidad que además de añadir 00:31:32
Un nodo hijo a un nodo 00:31:35
Te devuelve ese propio nodo 00:31:37
A orden retorno 00:31:39
Entonces, gracias a eso, pues lo puedo guardar aquí en autor 00:31:40
Que es lo que yo quiero en última instancia 00:31:42
Tener esa referencia del nodo 00:31:44
Vale, aunque 00:31:46
el propio nodo modificado 00:31:47
con el append child 00:31:50
no, el nodo text node te lo devuelve este 00:31:51
y se lo pasas a append child 00:31:56
y append child 00:31:58
append child lo fija al hijo 00:31:59
y te lo devuelve 00:32:02
como 00:32:04
veis porque 00:32:06
lo podemos ver aquí 00:32:08
añade el 00:32:10
new child a este 00:32:12
nodo y que te devuelve 00:32:17
Ah, no, te devuelve el nodo añadido, entonces no, no, no, no, no, vale, no, te devuelve el nodo añadido, pues no podemos ponerlo en una sola línea, ¿vale? Te devuelve el añadido, no pasa nada, esto se hace en copias y pegas y ya está, pues a ver, que Appenchild te devuelve el nodo añadido, con lo cual el autor se guardaría el nodo texto, no se guardaría el autor de encima, se guardaría el nodo texto de abajo, que es el que te devuelve Appenchild. 00:32:18
A penchal te devuelve el añadido 00:32:49
No al que estás tú añadiendo 00:32:51
Vale, entonces hemos hecho bien mirando la 00:32:53
Documenta, la ayuda 00:32:55
Vale, entonces ahora ya pues para hacer 00:32:57
A un punto a penchal, ¿no? 00:33:00
Claro, esto copiamos y pegamos 00:33:01
Para el resto de 00:33:03
Y ya está 00:33:05
Y ahora 00:33:06
Aquí vamos a tener 00:33:07
Esto también 00:33:12
Para el género y para el título 00:33:13
Vale, entonces 00:33:18
Este está, que es el título 00:33:20
el autor 00:33:22
text, autor 00:33:24
autor 00:33:26
y ahora out 00:33:29
append child 00:33:33
text, autor 00:33:35
vale, nos vamos con el género 00:33:39
no, es que es lo que acabamos de hacer, el append child 00:33:45
te devuelve con ahorro de retorno 00:33:53
el nodo creado, entonces si tú lo guardas 00:33:55
En el de arriba, pues te estás 00:33:58
Obrigiendo el de arriba, o sea, por eso hemos borrado el anterior 00:33:59
¿A qué te refieres? 00:34:01
Tú te has creado autor, por ejemplo 00:34:04
Sí, me he creado 00:34:05
Directamente ya guardado 00:34:07
Out.appensile 00:34:09
Vale, vale, vale, sí, sí, sí 00:34:15
Sí, sí, sí, vale, te refieres a 00:34:17
Claro, autor.appensile 00:34:19
Todo lo que, claro, sí, sí, sí 00:34:22
Esto 00:34:24
Claro, sí, sí 00:34:24
vale, te refieres a esto y me falta un paréntesis 00:34:29
si, una línea más ahorramos 00:34:31
efectivamente 00:34:33
vale 00:34:34
a ver, elemento autor 00:34:36
a ver 00:34:39
create text node 00:34:41
esto 00:34:42
text node 00:34:44
y create text node 00:34:48
la variable que es 00:34:51
autor 00:34:52
vale, entonces 00:34:53
voy a copiar y pegar ahora 00:34:56
Vale 00:34:58
Entonces, ya tenemos el autor 00:34:59
Nos faltará 00:35:02
El género 00:35:04
Y el, entonces 00:35:07
El autor 00:35:08
El género 00:35:10
Create element 00:35:13
Género 00:35:14
Todo por vu... 00:35:17
¡Ah! 00:35:21
Todo por vuestra culpa 00:35:26
Me estáis poniendo nerviosa 00:35:28
Vale, a ver 00:35:29
Create element autor 00:35:31
Entonces estaba cambiando el autor 00:35:32
Que no quiero cambiar el autor 00:35:34
Vale, ahora ya sí, me voy a este 00:35:36
Género 00:35:38
Create element 00:35:41
Género 00:35:44
Y a género 00:35:46
Le creamos 00:35:49
Un test node con 00:35:50
Género 00:35:51
Vale, género 00:35:54
Y ahora, esto es el año 00:35:59
Create 00:36:01
Element 00:36:04
Y ahora 00:36:06
Apen child 00:36:12
Vale 00:36:17
Y aquí que le pasa 00:36:20
Ah que la variable se llama así 00:36:23
Vale 00:36:25
Ya está 00:36:25
Vale create text node 00:36:27
Año y el año me lo han dado 00:36:33
En int 00:36:35
Con lo cual no pasa nada 00:36:36
Lo convierto a string 00:36:38
Y punto pelota 00:36:39
Ahora 00:36:42
Al autor 00:36:45
Y ahora al libro 00:36:53
Hay que pegarle todos los anteriores 00:36:54
Al libro punto 00:36:57
Apen child título 00:36:59
Vale 00:37:01
Que es este elemento 00:37:06
Ahora 00:37:07
A libro 00:37:08
A penchild 00:37:10
Autor 00:37:11
A libro 00:37:12
A penchild 00:37:16
Género 00:37:17
Y al 00:37:18
Mételo en un bucle 00:37:21
O sea, en un array 00:37:26
De element 00:37:27
O sea, en un array 00:37:28
En una lista de element 00:37:30
Lo serializas 00:37:31
Y lo haces con una lambda 00:37:32
Y sí, te queda una línea 00:37:33
Pero vamos 00:37:35
Que 00:37:37
Seguro que se lo piensa 00:37:39
Y te lo hace así también 00:37:42
No creo que haga otras cosas 00:37:43
Ya tenemos el libro con las cuatro cosas 00:37:45
Y ahora ya, el libro hay que dárselo al raíz 00:37:48
Dime 00:37:51
Guillermo 00:37:52
Bueno, es que aquí lo he hecho 00:37:53
En un nodo aparte en esta primera vez 00:38:01
Aquí hay que poner 00:38:03
El nodo que acabo de crear 00:38:05
El que acabo de crear 00:38:07
Es que aquí lo he hecho en una variable aparte 00:38:09
ya abajo lo he hecho directamente. 00:38:11
No lo he creado una variable aparte. 00:38:14
De abajo no. En la primera vez solo 00:38:15
lo he creado una variable aparte. 00:38:17
Entonces, ahora libro hay que darse al nodo raíz. 00:38:19
El nodo raíz 00:38:22
no es el NOC. 00:38:23
No es el DOC en realidad. 00:38:27
¿Vale? 00:38:30
Sí, el nodo raíz 00:38:32
es biblioteca, pero no es el mismo DOC. 00:38:34
Porque este 00:38:37
fichero biblioteca, de hecho, tiene 00:38:37
aquí una cosa delante. 00:38:39
Entonces, 00:38:42
¿Cómo sacamos el nodo raíz? 00:38:43
Pues el nodo raíz lo sacamos con este método 00:38:45
GetDocumentElement 00:38:48
¿Vale? 00:38:51
Con este sacamos el nodo raíz 00:38:52
Pues al nodo raíz 00:39:00
Le pegamos ya el libro 00:39:01
Que acabamos de hacer 00:39:04
Y nos falta el atributo 00:39:05
Nos falta el atributo 00:39:10
Que tendrá un atributo 00:39:13
Al atributo id 00:39:15
Le ponemos id 00:39:17
Y ahora tenemos que llamar a actualizar fichero 00:39:20
Los que están modificando el doc, sí 00:39:27
Entonces esto no lo ve así y es un rollo 00:39:34
Pero se escribe muy rápido 00:39:37
Vamos a agregar libro 00:39:40
En nuestro main 00:39:55
Agregamos libro 00:39:57
Vale, gestión 00:40:05
Agregar libro 00:40:12
Pues venga, el libro 5 00:40:18
Que ese ID no le tenemos 00:40:20
Disponible, no está disponible 00:40:21
Ah, este atributo no lo hemos fijado 00:40:26
Ahora 00:40:28
Esto sería el título 00:40:29
Imagino 00:40:34
Pues cualquier título que queráis 00:40:34
¿Qué título queremos? 00:40:38
Uno cortito 00:40:43
Este es el más corto que siempre se me ocurre 00:40:44
Este entiendo que es el autor 00:40:48
Momo 00:40:49
El autor es Momo 00:40:51
Este 00:40:52
Supongo que sería el género 00:40:55
El género 00:40:58
Pues yo que sé 00:41:00
Fantasía 00:41:01
Y este último int 00:41:03
Era 00:41:05
El año 00:41:06
1990 00:41:10
Yo que sé 00:41:11
Es que no le hemos puesto 00:41:13
Se nos ha olvidado en el método 00:41:15
Fijar el atributo disponibilidad 00:41:16
Porque tiene un atributo disponible 00:41:18
Entonces vamos a fijar 00:41:20
Disponibilidad que es lo único que nos faltaba 00:41:23
Drift.set 00:41:25
Atribute 00:41:29
Disponible 00:41:30
Y ahora disponibilidad 00:41:34
Está en 00:41:37
Boolean 00:41:38
Pero para 00:41:41
Como convertimos un Boolean 00:41:43
A string 00:41:45
Pues 00:41:46
La clase string 00:41:47
Esa es la concatenación 00:41:50
Tiene el value of 00:41:52
Que te convierte cualquier cosa a string 00:41:54
Pues ya está 00:41:55
Porque concatenar un boolean con el vacío 00:41:56
Eso ya sí que no, concatenar números sí 00:42:04
Pero ese ya no 00:42:05
Venga, vamos a ver a ver si lo he añadido 00:42:06
Un segundinín 00:42:10
Agregamos libro 00:42:12
El 5 00:42:22
Pues aquí está 00:42:26
Lo ha agregado 00:42:28
Venga, pues nos va 00:42:30
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Segundo Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
13
Fecha:
19 de octubre de 2025 - 17:32
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
42′ 33″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
212.05 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid