20251016 DOM_4 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
2
00:10:07
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
sí
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
Sí
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
Y
00:26:16
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
Sí
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
El
00:29:59
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
Ah
00:34:11
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