1 00:00:00,620 --> 00:00:12,900 Bueno, pues ya estamos aquí de nuevo. El otro día, bueno, estamos con el tema 5, ¿verdad? Que esto va a tratar de las conversiones y adaptación del documento a XML. 2 00:00:12,900 --> 00:00:42,880 Y bueno, es el tema 5 del lenguaje de marcas. 3 00:00:42,899 --> 00:00:50,240 extras ni nada nos generará mucho código entonces 4 00:00:50,240 --> 00:00:55,240 ya dije que lo que podemos hacer es descargarnos una versión de prueba de 30 5 00:00:55,240 --> 00:00:59,560 días y bueno yo me imagino que esos 30 días serán suficientes si necesitáis 6 00:00:59,560 --> 00:01:04,900 más días pues lo podéis crear con otra cuenta de correo electrónico y andamos 7 00:01:04,900 --> 00:01:10,280 así porque bueno o si bien es de pago pero bueno por lo menos nos permite 8 00:01:10,280 --> 00:01:18,560 probarla entonces ya me imagino que todos habréis instalado la herramienta y vamos a ir con él con 9 00:01:18,560 --> 00:01:24,840 la aplicación del código y del tema vale como siempre os dejo aquí un poco de código de para 10 00:01:24,840 --> 00:01:31,599 que vaya es trasteando y teniendo una base para ello yo ya me lo des está o sea me lo descomprimido 11 00:01:31,599 --> 00:01:37,879 no tenemos dos partes está de test es un código que está en los contenidos vale y al final en 12 00:01:37,879 --> 00:01:46,280 En la última página de los contenidos hay un vídeo que lo explica, pero bueno, lo voy a volver a explicar yo también para que esté claro. 13 00:01:47,180 --> 00:01:57,920 Y luego, pues eso, hay otro código que lo he generado yo y me va a servir de base para explicaros el tema, ¿vale? 14 00:01:57,920 --> 00:02:01,459 Y a vosotros para poder hacer la práctica, la tarea, si queréis. 15 00:02:01,459 --> 00:02:29,169 Entonces, vale. Vamos a ejecutar Oxygen. ¿Dónde estás? Aquí. Que tarda un ratillo. Vale, perfecto. 16 00:02:29,169 --> 00:02:35,789 Entonces aquí lo que vamos a hacer va a ser abrir el test 17 00:02:35,789 --> 00:02:47,180 Como vemos, tenemos un archivo XML y un XSL 18 00:02:47,180 --> 00:02:52,699 Lo que hacemos con el XSLT, o sea la transformación 19 00:02:52,699 --> 00:02:54,939 Tenemos un archivo XSL 20 00:02:54,939 --> 00:02:59,120 Luego el XSLT es la transformación del XML 21 00:02:59,120 --> 00:03:07,319 Entonces lo que tenéis que pensar es que de una base de datos se pueden exportar los datos en formato XML 22 00:03:07,319 --> 00:03:09,759 Entonces esos datos van a ser dinámicos 23 00:03:09,759 --> 00:03:13,219 Porque realmente hoy tenemos una empresa de 20 empleados 24 00:03:13,219 --> 00:03:15,080 Igual dentro de 5 años tenemos 500 25 00:03:15,080 --> 00:03:18,659 Entonces esos empleados van cambiando 26 00:03:18,659 --> 00:03:25,240 Y si queremos plasmar esta información, estos datos en una página web 27 00:03:25,240 --> 00:03:28,439 Sería conveniente que esta página web también fuera dinámica 28 00:03:28,439 --> 00:03:48,719 Entonces, es una forma de hacerlo. A medida que el XML va creciendo, pues nosotros, como tenemos en realidad una transformación con el XSL, vamos a hacer en el mismo XSL una programación del HTML para saber cómo queremos que se muestren los datos. 29 00:03:48,719 --> 00:04:03,960 También se pueden añadir incluso hojas de estilo con CSS, que lo hemos visto, ¿verdad? Y luego, a la hora de decir un párrafo y aquí le ponemos la información o el nombre, apellidos y la información o la información en una tabla, ¿vale? 30 00:04:03,960 --> 00:04:15,840 Cuando programamos la tabla en HTML con su CSS. Pues justo a la hora de plasmar los datos, de meterle los datos, es donde vamos a leerlos del XML, ¿vale? 31 00:04:15,879 --> 00:04:29,540 Donde vamos a coger esos datos del XML con XPath. XPath lo que te permite es acceder a esos datos y se basa en que el XML está dividido en nodos. 32 00:04:29,540 --> 00:04:43,139 Y estos nodos tienen una jerarquía. Empezando por el nodo raíz, que es agenda en este caso. Este tiene un hijo, que es persona, y a su vez persona tiene tres hijos. 33 00:04:43,819 --> 00:04:52,240 Identificadores, dirección y teléfono. Si vamos a dirección tiene a su vez tres hijos, calle, localidad y código postal. 34 00:04:52,240 --> 00:04:58,600 Y código postal tiene un padre que es dirección y dirección tiene un padre que es persona y persona tiene un padre que es agenda. 35 00:04:58,600 --> 00:05:07,819 Entonces vemos que un XML normal está compuesto por nodos y esos nodos tienen una jerarquía de hijos y padres 36 00:05:07,819 --> 00:05:14,399 Teniendo en cuenta esta jerarquía, con el XPath vamos a poder acceder a ellos 37 00:05:15,060 --> 00:05:22,579 Entonces vemos que aquí tenemos un template con persona 38 00:05:22,579 --> 00:05:27,759 Entonces aquí lo que estamos haciendo es posicionarnos en la información que tiene persona 39 00:05:27,759 --> 00:05:43,560 Que sería esta de aquí. Entonces aquí utilizamos ApplyTemplate ya. Son funciones que tiene predefinidas XSL y hay que saber utilizarlas. 40 00:05:43,819 --> 00:05:56,420 Entonces con el template nos posicionamos en persona aquí. Luego con ApplyTemplate lo que estamos haciendo es ApplyTemplateIdentificadores que es este que hemos programado aquí arriba. 41 00:05:56,420 --> 00:06:09,540 Y lo que vamos a hacer es sacar el nombre y el apellido. Como estamos posicionados en persona, nombre y apellido está dentro de identificadores. 42 00:06:09,740 --> 00:06:18,300 Entonces, posicionándonos en persona no podríamos acceder a nombre y apellido. Solo podríamos acceder a identificadores, a dirección y a teléfono. 43 00:06:18,300 --> 00:06:29,100 Pero, como estamos aplicando este template de arriba, que este template de arriba sí que está en identificadores, sí que tiene acceso a nombre y apellidos. 44 00:06:29,279 --> 00:06:30,459 Entonces, es lo que sacamos. 45 00:06:31,459 --> 00:06:31,639 ¿Vale? 46 00:06:32,319 --> 00:06:33,779 ¿Cómo ejecutamos esto? 47 00:06:34,459 --> 00:06:37,100 Pues, primero tenemos que hacer una configuración. 48 00:06:37,759 --> 00:06:38,019 ¿Veis? 49 00:06:39,199 --> 00:06:41,160 Configure Transformation Scenario. 50 00:06:42,360 --> 00:06:46,540 Entonces, yo ya tengo dos escenarios creados. 51 00:06:46,540 --> 00:06:46,980 ¿Vale? 52 00:06:46,980 --> 00:06:51,680 Pero imaginad que esta lista estuviera vacía 53 00:06:51,680 --> 00:06:54,279 Le daríamos a New para crear un escenario 54 00:06:54,279 --> 00:06:55,920 Yo le voy a dar a Edit porque ya está 55 00:06:55,920 --> 00:07:01,000 Entonces os saldría una pantalla como esta al darle a New 56 00:07:01,000 --> 00:07:09,579 Lo que queremos es ponerle la URL del XML que vamos a coger 57 00:07:09,579 --> 00:07:12,259 Y cuando le das, por defecto es esta, mira 58 00:07:12,259 --> 00:07:15,980 Vamos a borrarlos y los hacemos nuevos 59 00:07:15,980 --> 00:07:18,399 Vale 60 00:07:18,399 --> 00:07:20,300 Entonces 61 00:07:20,300 --> 00:07:22,459 Tenemos esto, ¿no? 62 00:07:22,939 --> 00:07:23,920 Le damos a la llave 63 00:07:23,920 --> 00:07:26,040 Anda, me vuelven a salir 64 00:07:26,040 --> 00:07:29,199 Safe and close 65 00:07:29,199 --> 00:07:31,560 Vale, perfecto 66 00:07:31,560 --> 00:07:32,540 Le damos a la llave 67 00:07:32,540 --> 00:07:33,540 Uy, la leche 68 00:07:33,540 --> 00:07:37,259 Vale, ahora sí 69 00:07:37,259 --> 00:07:38,139 Perdonad 70 00:07:38,139 --> 00:07:38,920 Genial 71 00:07:38,920 --> 00:07:40,519 No tenemos escenarios 72 00:07:40,519 --> 00:07:43,279 Vale, estamos empezando 73 00:07:43,279 --> 00:07:45,079 From scratch, como dicen los ingreses 74 00:07:45,079 --> 00:07:55,740 entonces le damos a new entonces tenemos xslt transformation on xml le damos ahí porque es la 75 00:07:55,740 --> 00:08:02,860 opción que queremos entonces que xml vamos a coger el que viene por defecto porque como 76 00:08:02,860 --> 00:08:12,620 estamos posicionados en el xsl vale y en la misma carpeta te viene prueba punto xml ya te lo coge 77 00:08:12,620 --> 00:08:25,000 por defecto. Entonces simplemente dándole a la flechita lo seleccionas. ¿Y el xsl dónde está? Pues en el current file url, ¿no? En la url que estamos 78 00:08:25,000 --> 00:08:35,679 seleccionando. Por esto es importante que cuando le deis a ejecutar estéis seleccionando al xsl, porque si seleccionáis otro archivo no lo va a pillar, ¿vale? 79 00:08:35,679 --> 00:08:41,620 Porque aquí le estamos diciendo que el archivo que está activo es el xsl que vamos a coger, ¿vale? 80 00:08:43,179 --> 00:08:50,580 Entonces si le damos, le damos a Apply y ya te lo ejecuta. 81 00:08:51,320 --> 00:08:55,559 ¿Veis? Aquí lo que está cogiendo es el nombre y apellidos de los identificadores. 82 00:08:56,360 --> 00:09:05,960 Entonces si vamos al xml vemos que Inés López Pérez y aquí es Roberto Gutiérrez Gómez, ¿vale? 83 00:09:05,960 --> 00:09:27,279 Entonces es simplemente eso. También le podemos generar ahí. Entonces, esto es un pequeño ejemplito, que es el del contenido que tenemos en la unidad. También lo explican ahí, si queréis ver el vídeo también está guay. 84 00:09:27,279 --> 00:09:39,679 Pero bueno, es básicamente lo que os he explicado yo. Este encabezamiento, aquí como estamos utilizando OxygenXML, no haría falta, ¿vale? Va a funcionar igual. 85 00:09:40,519 --> 00:09:54,120 Pero si estuviéramos utilizando Visual Studio Code o alguna otra herramienta, pues ya cambia la historia, ¿vale? Porque no son herramientas que estén orientadas 100% al XML como Oxygen, entonces hay que configurar de otra manera. 86 00:09:54,120 --> 00:10:13,340 Y sí que se añaden. ¿De acuerdo? Entonces, bueno, pues vamos a cerrar esto. Ah, también os quería enseñar. Si le dais aquí a New, podéis crear un montón de formatos. 87 00:10:13,340 --> 00:10:27,580 Y, por ejemplo, tengo aquí ya seleccionada el XSLT. Si le dais a crear, veis que ya os arma el esqueleto con todas las referencias que son necesarias y las versiones y de todo. 88 00:10:28,879 --> 00:10:37,559 Entonces, para que lo sepáis a la hora de empezar la tarea y todo eso, si lo necesitáis. 89 00:10:37,559 --> 00:10:47,039 Perfecto, entonces vamos a darle a abrir y vamos con el código ya más complejo que os he introducido 90 00:10:47,039 --> 00:10:56,779 Aquí tenemos la agenda que hemos estado trabajando en unidades anteriores 91 00:10:56,779 --> 00:11:01,320 En este caso le he metido tres contactos y como veis sigue teniendo una jerarquía 92 00:11:01,320 --> 00:11:07,000 Agendas en el nodo raíz, luego tenemos contactos, nombre, apellidos, teléfono de edad 93 00:11:07,000 --> 00:11:08,899 direcciones que a su vez tiene 3 94 00:11:08,899 --> 00:11:11,220 entonces esto con el XPath 95 00:11:11,220 --> 00:11:12,600 lo tendremos que tener en cuenta 96 00:11:12,600 --> 00:11:14,279 vale 97 00:11:14,279 --> 00:11:15,620 entonces 98 00:11:15,620 --> 00:11:19,279 he creado 99 00:11:19,279 --> 00:11:20,039 un XSL 100 00:11:20,039 --> 00:11:22,059 con funciones 101 00:11:22,059 --> 00:11:25,539 que normalmente se utilizan 102 00:11:25,539 --> 00:11:27,740 entonces 103 00:11:27,740 --> 00:11:30,840 vamos a configurar 104 00:11:30,840 --> 00:11:32,179 la transformación 105 00:11:32,179 --> 00:11:35,620 nos posicionamos en el XSL 106 00:11:35,620 --> 00:11:36,759 de acuerdo 107 00:11:36,759 --> 00:11:53,700 y le damos a la llave. Ya tenemos la anterior pero la anterior no nos vale porque si le damos se va a ejecutar así y esto no es lo que queremos. 108 00:11:53,700 --> 00:12:10,799 Lo que queremos es crear una nueva transformación. Entonces, vamos a coger el XML por defecto, que es agenda, y en el XSL el current, como habíamos hablado. 109 00:12:10,799 --> 00:12:18,149 entonces aquí lo que sí que va a cambiar es que vamos a generar un output 110 00:12:18,149 --> 00:12:21,629 y le vamos a decir que se abra en el browser 111 00:12:21,629 --> 00:12:28,230 y le vamos a llamar index.xml 112 00:12:28,230 --> 00:12:36,769 entonces lo que estamos haciendo aquí es que queremos que se ejecute 113 00:12:36,769 --> 00:12:41,090 que cada vez que lo ejecutemos se grabe en un archivo de salida 114 00:12:41,090 --> 00:12:43,789 que se llame index.html 115 00:12:43,789 --> 00:12:46,549 y se guarde, se vaya sobrescribiendo 116 00:12:46,549 --> 00:12:48,590 sobre sí mismo, entonces si le damos 117 00:12:48,590 --> 00:12:50,029 a aceptar 118 00:12:50,029 --> 00:12:53,110 vamos a cambiarle el nombre 119 00:12:53,110 --> 00:12:54,649 vamos a ponerle 120 00:12:54,649 --> 00:12:57,090 agenda.html 121 00:12:57,090 --> 00:13:04,159 perfecto 122 00:13:04,159 --> 00:13:06,799 entonces 123 00:13:06,799 --> 00:13:10,059 le damos a aplicar 124 00:13:10,059 --> 00:13:11,899 y ya se ejecuta en el 125 00:13:11,899 --> 00:13:13,000 browser 126 00:13:13,000 --> 00:13:15,279 vale 127 00:13:15,279 --> 00:13:31,590 ¿Vale? Perfecto. Entonces, vamos una a una a ver cómo funciona esto del xsl y el xslt y cómo saca los datos del xml y todo eso. 128 00:13:32,370 --> 00:13:35,090 Perdonadme que voy a ajustar aquí una cosita. 129 00:13:35,090 --> 00:13:44,230 vale, entonces 130 00:13:44,230 --> 00:13:46,370 lo primero que hacemos es 131 00:13:46,370 --> 00:13:49,509 con el template posicionarnos en la raíz 132 00:13:49,509 --> 00:13:50,990 que es agenda 133 00:13:50,990 --> 00:13:53,049 ¿vale? entonces 134 00:13:53,049 --> 00:13:54,929 en la raíz lo que estamos haciendo es 135 00:13:54,929 --> 00:13:57,129 teniendo acceso a todo lo que 136 00:13:57,129 --> 00:13:59,129 contiene la raíz, que es esto 137 00:13:59,129 --> 00:13:59,970 que he subrayado 138 00:13:59,970 --> 00:14:05,889 entonces ya a partir de aquí lo que vamos a hacer es 139 00:14:05,889 --> 00:14:07,690 programar nuestro html 140 00:14:07,690 --> 00:14:19,129 Que, como os he dicho, le podemos introducir un CSS, una hoja de estilos para que quedara más bonito. Pero bueno, de momento vamos a programar nuestro HTML. 141 00:14:19,129 --> 00:14:37,250 Que si vais a la tarea, el HTML ya se da. O sea, tendrías que copiar todo esto para luego sacarle los datos, la información. 142 00:14:37,690 --> 00:14:51,009 Vale, y que saliera aquí. Y también el XML también se da, que ya son los datos que tenéis que añadir aquí con la transformación del XSL. 143 00:14:52,269 --> 00:14:59,889 Vale, entonces, como veis aquí, pues vamos programando el HTML con su head, su título y su body. 144 00:14:59,889 --> 00:15:03,330 Entonces vamos explicando cosillas 145 00:15:03,330 --> 00:15:06,330 Hemos dicho que estamos en agenda 146 00:15:06,330 --> 00:15:07,389 ¿Vale? 147 00:15:07,830 --> 00:15:08,330 Entonces 148 00:15:08,330 --> 00:15:12,490 XSL y XPath tienen una serie de funciones 149 00:15:12,490 --> 00:15:14,029 Que nos pueden ser útiles 150 00:15:14,029 --> 00:15:15,029 Como para 151 00:15:15,029 --> 00:15:18,009 La primera que vamos a ver es 152 00:15:18,009 --> 00:15:19,309 Para ver el nodo actual 153 00:15:19,309 --> 00:15:20,929 Que es con la función name 154 00:15:20,929 --> 00:15:24,610 Y esto lo que nos saca es 155 00:15:24,610 --> 00:15:25,590 Nodo actual 156 00:15:25,590 --> 00:15:26,809 Agenda 157 00:15:26,809 --> 00:15:29,049 Que es donde estamos 158 00:15:29,049 --> 00:15:32,490 hemos dicho que estamos en la agenda 159 00:15:32,490 --> 00:15:33,990 que es el nodo raíz 160 00:15:33,990 --> 00:15:35,529 seguimos 161 00:15:35,529 --> 00:15:37,830 estamos en la agenda 162 00:15:37,830 --> 00:15:40,110 entonces decimos que 163 00:15:40,110 --> 00:15:42,450 por cada contacto 164 00:15:42,450 --> 00:15:44,289 que es el siguiente 165 00:15:44,289 --> 00:15:45,850 estamos en la agenda 166 00:15:45,850 --> 00:15:48,710 desde la agenda podemos ver los contactos 167 00:15:48,710 --> 00:15:50,710 no podemos ver 168 00:15:50,710 --> 00:15:51,470 lo que hay dentro 169 00:15:51,470 --> 00:15:54,490 lo que podemos ver es el contacto 170 00:15:55,389 --> 00:15:56,029 entonces 171 00:15:56,029 --> 00:16:22,350 Entonces, por ejemplo, este que tenemos aquí. Estamos en la agenda, con el value of estamos extrayendo el valor. Entonces, como hemos dicho que agenda podemos ver los contactos, podríamos poner simplemente contacto y se sacaría la información de los tres contactos, pero también podemos utilizar índices. 172 00:16:22,350 --> 00:16:34,750 índices. La diferencia es que esto no es como un array, una lista en Python que va de 0 a n-1, esto va de 1 a n. Entonces, si queremos sacar la información 173 00:16:34,750 --> 00:16:44,009 del segundo contacto, ponemos entrecochetes 2. Estamos en la agenda, por eso podemos acceder al contacto. Y aquí estamos accediendo al segundo contacto. 174 00:16:44,009 --> 00:16:48,450 Vale, vamos a continuación 175 00:16:48,450 --> 00:16:51,610 Como tenemos más de un contacto, utilizamos un for each 176 00:16:51,610 --> 00:16:55,350 Y lo que va a hacer el for each es recorrer todos los contactos, los tres 177 00:16:55,350 --> 00:17:02,570 Porque si no, lo que haría es que si por ejemplo ponemos value of select contacto 178 00:17:02,570 --> 00:17:05,930 Y aquí ponemos nombre y apellidos 179 00:17:05,930 --> 00:17:10,630 Lo que nos va a hacer es sacar primero Paula, Alberto, Juan 180 00:17:10,630 --> 00:17:12,890 Porque va a recorrer los nombres primeros 181 00:17:12,890 --> 00:17:20,390 y luego va a recorrer los apellidos, pero con el forEach nos aseguramos de que coge cada elemento como un elemento individual 182 00:17:20,390 --> 00:17:29,529 y es como se hace para recorrer, por ejemplo, en un XML los 500 datos que tuviéramos, ¿vale? 183 00:17:29,849 --> 00:17:37,529 Entonces, estamos en la agenda, bajamos a contacto, como bajamos a contacto ya tenemos acceso a toda esta información, 184 00:17:37,529 --> 00:17:47,730 entonces decimos que por cada contacto lo que va a hacer es sacar el valor de la concatenación del nombre espacio apellido 185 00:17:47,730 --> 00:17:57,230 y además vamos a sacar el país que es el valor de teléfono y dentro de teléfono tenemos un atributo que se llama país 186 00:17:57,230 --> 00:18:17,970 ¿Y cómo es un atributo? Pues se llama con arroba país, ¿vale? Slash arroba país. Porque lo que tenemos es que estamos en agenda, hemos bajado, le hemos dicho que por cada contacto saque el país del teléfono, ¿vale? 187 00:18:17,970 --> 00:18:25,410 Por cada contacto va a sacar el nombre y apellidos concatenado y el país de cada teléfono. 188 00:18:26,670 --> 00:18:37,769 ¿De acuerdo? Entonces, si vamos al navegador, lo que tenemos es que nos saca el nombre y los apellidos y el país. 189 00:18:38,410 --> 00:18:40,170 Nombre y apellidos y el país. 190 00:18:40,170 --> 00:19:05,630 Nombre de apellidos y el país. Vemos que la información del segundo contacto es de Alberto Sierra García. Entonces aquí, información del segundo contacto, que habíamos dicho que estábamos en la agenda, desde la agenda solo podemos acceder a los contactos y para acceder al segundo contacto era con el índice. 191 00:19:05,630 --> 00:19:21,009 Entonces nos saca toda la información del segundo contacto. Todo esto. Como veis aquí. Continuamos. 192 00:19:21,009 --> 00:19:25,750 Imaginad que tenéis un XML súper complicado 193 00:19:25,750 --> 00:19:28,990 Que no son dos o tres niveles de jerarquía 194 00:19:28,990 --> 00:19:35,369 Sino que tendrías que navegar mucho por el fichero 195 00:19:35,369 --> 00:19:40,069 Hay una forma de acceder al nombre de un nodo en concreto 196 00:19:40,069 --> 00:19:41,309 Que es con slash slash 197 00:19:41,309 --> 00:19:46,170 Con slash slash lo que haces es que te da igual la jerarquía 198 00:19:46,170 --> 00:19:49,430 Lo que va a buscar es nodos con este nombre 199 00:19:49,430 --> 00:20:03,950 ¿Vale? Porque hemos dicho que aquí estamos en la agenda, que desde la agenda solo podemos llegar a contacto. Para llegar a dirección tendríamos que meternos en contacto y ya acceder a esto, donde está dirección. 200 00:20:03,950 --> 00:20:11,349 pero como ponemos en las eslas ya accedemos a dirección directamente entonces hay unos 201 00:20:11,349 --> 00:20:18,990 operadores que es el punto y el punto punto vale no sé si habéis navegado por ms2 pero es algo 202 00:20:18,990 --> 00:20:24,569 parecido con el punto lo que hacemos es obtener la información del mismo nivel en el que estamos 203 00:20:24,569 --> 00:20:31,450 del nivel actual con el punto punto obtenemos información del nivel superior vale como que 204 00:20:31,450 --> 00:20:36,930 subimos de nivel. Entonces aquí lo que estamos haciendo es slash slash dirección. Le estamos 205 00:20:36,930 --> 00:20:42,849 diciendo que allá donde encuentre un nodo cuyo nombre sea dirección es donde vamos a obtener la 206 00:20:42,849 --> 00:20:48,049 información. Con el punto le estamos diciendo que muestre toda la información de ese nivel. Entonces 207 00:20:48,049 --> 00:20:53,210 con el punto lo que estamos diciendo es que saque la calle el número y el código postar. 208 00:20:53,210 --> 00:21:02,190 Entonces, para sacar el correo, como estamos metidos dentro de dirección, necesitamos subir un nivel 209 00:21:02,190 --> 00:21:09,609 Cuando subes un nivel ya puedes sacar el nombre, el apellido, los teléfonos, la edad y el correo 210 00:21:09,609 --> 00:21:17,769 Entonces, lo que hacemos es, dentro de dirección subimos fuera, al nivel superior, con el punto a punto 211 00:21:17,769 --> 00:21:30,759 Y allí sacamos el correo. Entonces, vemos que aquí nos está sacando todos los datos de la dirección, calle, número y código postal y también el correo. 212 00:21:33,940 --> 00:21:43,480 Esto de información de segundo contacto ya lo hemos explicado. Seguimos. Seguimos con contactos. 213 00:21:43,480 --> 00:21:56,299 Por cada contacto, es decir, que va a recorrer los tres contactos, vamos a sacar el valor cuyo país del teléfono sea Netherlands. 214 00:21:57,099 --> 00:22:01,480 ¿Qué estamos haciendo aquí? Ya estamos poniendo filtros, estamos poniendo condicionales. 215 00:22:03,940 --> 00:22:11,740 Aquí estaríamos como haciendo un bucle recorriendo los tres contactos y dentro del bucle tendríamos un if. 216 00:22:11,740 --> 00:22:22,119 Si país es igual a Netherlands, lo saco. Es una especie de programación que tenemos con el XPath. 217 00:22:22,519 --> 00:22:36,619 Entonces, como veis, podemos tener condicionales, tener filtros. De los 500 usuarios que me ha devuelto la base de datos, solo quiero sacar los que tengan la lengua azul. 218 00:22:36,619 --> 00:22:51,940 ¿Vale? Si hubiera un parámetro que fuera el color de lengua, pues pondríamos color de lengua igual azul. Entonces solo te sacaría esos. ¿Vale? Y como veis, como es un atributo, pues se pone con arroba. 219 00:22:51,940 --> 00:22:55,339 sacar los contactos más viejos 220 00:22:55,339 --> 00:22:56,980 ¿qué es lo que pasa? 221 00:22:57,720 --> 00:22:59,240 que estos operadores 222 00:22:59,240 --> 00:23:01,960 el operador del igual sí que se lo traga 223 00:23:01,960 --> 00:23:04,599 pero el operador de menor y mayor 224 00:23:04,599 --> 00:23:06,599 no, porque es un programa 225 00:23:06,599 --> 00:23:08,279 o sea, es un lenguaje de etiquetas 226 00:23:08,279 --> 00:23:10,039 y las etiquetas de mayor y menor 227 00:23:10,039 --> 00:23:11,900 las utilizamos para abrir y cerrar 228 00:23:11,900 --> 00:23:13,500 entonces si le ponemos aquí 229 00:23:13,500 --> 00:23:16,680 un mayor, si le ponemos esta etiqueta aquí 230 00:23:16,680 --> 00:23:18,799 el lenguaje va a interpretar 231 00:23:18,799 --> 00:23:20,920 que la sentencia se acaba aquí 232 00:23:20,920 --> 00:23:28,960 que es de cierre. Y por eso no podemos utilizar estos operadores. Ya lo vimos en las primeras unidades, ¿verdad? 233 00:23:28,960 --> 00:23:45,950 Que lo que utilizamos es el greater than. Entonces, si queremos sacar los contactos más viejos, lo que vamos a hacer es que 234 00:23:45,950 --> 00:24:06,630 Por cada contacto cuya edad sea mayor que 30, ¿vale? Vamos a ver cuántos contactos tenemos de esos. Edad 80 años, edad 31, edad 29. O sea, estamos hablando de estos dos contactos. 235 00:24:06,630 --> 00:24:10,069 ¿Vale? 236 00:24:11,329 --> 00:24:13,710 O sea, con esta sentencia lo que hacemos es que 237 00:24:13,710 --> 00:24:15,630 De todos los contratos que tenemos 238 00:24:15,630 --> 00:24:17,210 Solo estamos cogiendo estos dos 239 00:24:17,210 --> 00:24:20,799 Ahora 240 00:24:20,799 --> 00:24:24,460 Con el XSL sort 241 00:24:24,460 --> 00:24:26,799 Lo que hacemos es ordenarlos 242 00:24:26,799 --> 00:24:29,099 De menor a mayor 243 00:24:29,099 --> 00:24:39,019 Vale, aquí ya estamos sacando el teléfono 244 00:24:39,019 --> 00:24:40,160 De Netherlands 245 00:24:40,160 --> 00:24:42,160 Porque Netherlands 246 00:24:42,160 --> 00:24:44,700 Es este de aquí 247 00:24:44,700 --> 00:24:47,000 ¿Vale? Y solo sacamos ese 248 00:24:47,000 --> 00:24:49,900 A pesar de que estamos 249 00:24:49,900 --> 00:24:53,599 Metiendo un for each 250 00:24:53,599 --> 00:24:55,779 ¿Vale? Si no estuviera discriminando 251 00:24:55,779 --> 00:24:57,319 Me sacaría los tres 252 00:24:57,319 --> 00:24:59,579 Pero como solo quiero el de Netherlands 253 00:24:59,579 --> 00:25:00,799 Me saca el de Netherlands 254 00:25:00,799 --> 00:25:03,220 ¿Vale? 255 00:25:03,299 --> 00:25:05,940 Y ahora estamos sacando los contactos más viejos 256 00:25:05,940 --> 00:25:08,779 Sacar los contactos más viejos 257 00:25:08,779 --> 00:25:10,779 Entonces Alberto es el primero 258 00:25:10,779 --> 00:25:14,299 Porque Alberto es más joven 259 00:25:14,299 --> 00:25:16,619 Y luego saca Paula, que es 80 260 00:25:16,619 --> 00:25:19,440 ¿Vale? Entonces lo que hace el sort 261 00:25:19,440 --> 00:25:21,660 Sort, que es ordenar en inglés, claro 262 00:25:21,660 --> 00:25:25,519 Es ordenar en orden ascendente 263 00:25:25,519 --> 00:25:28,500 Entonces eso 264 00:25:32,079 --> 00:25:36,799 Aquí le estamos diciendo que ordene ascendentemente por edad 265 00:25:36,799 --> 00:25:40,240 ¿Vale? Por eso saca primero a Alberto y luego a Paula 266 00:25:40,240 --> 00:25:52,099 Y aquí con el choose lo que hacemos es que le decimos que si el nombre es Alberto 267 00:25:52,099 --> 00:25:58,500 Esto es como un if-else 268 00:25:58,500 --> 00:26:02,240 ¿Sabes? Si pasa esto hacemos una cosa 269 00:26:02,240 --> 00:26:04,339 Si no, hacemos otra cosa 270 00:26:04,339 --> 00:26:05,200 ¿Vale? 271 00:26:05,599 --> 00:26:09,140 Porque es verdad que aquí esto es equivalente a if 272 00:26:09,140 --> 00:26:16,480 Si edad es mayor que 30, pero si quisiéramos hacer un else, tendríamos que utilizar un choose 273 00:26:16,480 --> 00:26:21,880 En plan de, si edad es mayor que 30, hacemos esto 274 00:26:21,880 --> 00:26:23,619 Y si no, hacemos otra cosa 275 00:26:23,619 --> 00:26:27,279 Pues para hacer ese tipo de estructuras tenemos que utilizar un choose 276 00:26:27,279 --> 00:26:34,059 Entonces aquí lo que estamos haciendo es, cuando el nombre sea igual a Alberto 277 00:26:34,059 --> 00:26:37,039 Y fijaros en una cosa que tampoco os he dicho 278 00:26:37,039 --> 00:26:40,539 No son comillas dobles, son comillas simples 279 00:26:40,539 --> 00:26:43,700 ¿Vale? Para las cadenas de caracteres 280 00:26:43,700 --> 00:26:47,539 Comillas simples, porque si no, no lo va a pillar 281 00:26:47,539 --> 00:26:53,039 Esto de las comillas simples está al lado del cero 282 00:26:53,039 --> 00:26:55,440 ¿Vale? A la derecha del cero en el teclado 283 00:26:55,440 --> 00:26:59,299 Es la que tiene el cierre de la interrogación arriba 284 00:27:04,279 --> 00:27:09,880 ¿Vale? Pues eso, que tenéis que utilizar comillas simples 285 00:27:09,880 --> 00:27:24,079 Aquí estoy utilizando comillas simples. Entonces volvemos. Estructura choose. Cuando el nombre sea igual a Alberto, lo cambiamos a Alberto, ahora se llama Pedro. 286 00:27:24,079 --> 00:27:41,359 Si no, sacamos el valor. Ya está. ¿Vale? Aquí podríamos hacer otra cosa, pero lo dejamos así. ¿Vale? Entonces, aquí lo que estamos haciendo es que cuando se llama Alberto lo cambiamos y si no, sacamos el valor. 287 00:27:41,720 --> 00:27:52,859 Para que veáis cómo es una estructura de if-else. ¿Vale? Y es lo que tenemos aquí. Por eso no me saca Alberto. Me saca Alberto, ahora se llama Pedro y luego me saca Paula. 288 00:27:54,079 --> 00:28:10,630 vale y por último el operador estrella aquí lo que estamos haciendo es seleccionar todo lo que 289 00:28:10,630 --> 00:28:21,049 contenga la dirección que es esto de aquí y me diréis jolín y por qué no simplemente lo pongo 290 00:28:21,049 --> 00:28:30,309 quitando esto verdad vamos a ver las diferencias con estrella como veis aquí lo que estamos 291 00:28:30,309 --> 00:28:44,130 haciendo es ponerle el nombre de cada nodo verdad y luego le sacamos la información del nodo del 292 00:28:44,130 --> 00:28:48,809 nivel actual porque es el punto recordad que el nivel actual era el punto el nivel superior era 293 00:28:48,809 --> 00:28:55,990 era el punto punto vale entonces con el asterisco sale aquí calle 294 00:28:56,490 --> 00:29:01,990 la calle el número el código postal la calle número el código postal si le 295 00:29:01,990 --> 00:29:05,049 quitamos el asterisco 296 00:29:08,470 --> 00:29:12,890 ya te sale todo junto 297 00:29:12,890 --> 00:29:26,650 ¿Vale? Esa es la diferencia. Que con el asterisco te va a ir, digamos, sacando los elementos que hay dentro de ese nivel, pero uno a uno. 298 00:29:27,789 --> 00:29:32,130 ¿Vale? Porque si lo ponemos así, lo que va a hacer es que te va a sacar todo. 299 00:29:32,130 --> 00:29:34,750 Nodo actual, aquí está en dirección 300 00:29:34,750 --> 00:29:40,680 Que hemos dicho que al principio estamos en agenda 301 00:29:40,680 --> 00:29:41,859 Ups, perdón 302 00:29:41,859 --> 00:29:45,019 En agenda porque nos hemos posicionado en agenda 303 00:29:45,019 --> 00:29:48,619 Luego estamos en contacto 304 00:29:48,619 --> 00:29:50,640 Y dentro de contacto hemos ido dirección 305 00:29:50,640 --> 00:29:54,220 Agenda, contacto y dirección 306 00:29:54,220 --> 00:29:55,099 Estamos aquí 307 00:29:55,099 --> 00:29:57,839 Vale, nodo actual, dirección 308 00:29:57,839 --> 00:29:59,619 Datos, todos estos 309 00:29:59,619 --> 00:30:01,359 Y por eso me saca ahí, así 310 00:30:01,359 --> 00:30:02,740 Nodo actual, dirección 311 00:30:02,740 --> 00:30:04,119 Datos, todos estos 312 00:30:04,119 --> 00:30:21,240 Sin embargo, si le ponemos barra asterisco, ya lo que va a hacer es ir elemento por elemento. 313 00:30:22,240 --> 00:30:35,069 Ya no se va a meter en todo esto, sino que va a decir por cada elemento, por eso es un forEach, 314 00:30:35,069 --> 00:30:56,250 Por cada elemento que encuentre dentro de dirección va a sacar una línea. Por eso aquí cuando le decimos el nombre del primer elemento no va a sacar dirección, va a sacar el primer elemento. 315 00:30:56,250 --> 00:31:00,250 luego va a volver a recorrer el segundo y te va a sacar el segundo elemento 316 00:31:00,250 --> 00:31:03,849 va a volver a recorrer el tercero y te va a sacar el tercer elemento 317 00:31:03,849 --> 00:31:06,150 y te va a sacar el valor de ese nivel 318 00:31:06,150 --> 00:31:10,210 entonces lo que va a hacer es coger calle 319 00:31:10,210 --> 00:31:13,049 posicionarse aquí, ¿vale? 320 00:31:13,910 --> 00:31:18,049 o sea, con el asterisco estamos aquí, en dirección 321 00:31:18,049 --> 00:31:22,970 y con el asterisco le decimos que queremos recorrer cada elemento 322 00:31:22,970 --> 00:31:27,990 que sea hijo del padre que es dirección. 323 00:31:29,309 --> 00:31:31,150 Entonces, nos posicionamos aquí. 324 00:31:31,309 --> 00:31:33,170 Con el name le decimos que estamos en calle. 325 00:31:33,650 --> 00:31:35,990 Y sacamos el valor con el punto. 326 00:31:38,319 --> 00:31:41,480 Lo mismo pasa para número, lo mismo pasa para código postal. 327 00:31:42,160 --> 00:31:42,480 ¿De acuerdo? 328 00:31:45,240 --> 00:31:48,880 Entonces, por eso lo sacaré con este formato. 329 00:31:50,339 --> 00:31:54,240 Y esa es la explicación del código que os he presentado. 330 00:31:54,339 --> 00:32:21,779 Ahora, con este código ya podréis hacer la tarea, como os he dicho, que simplemente es coger el XML que os dan en la tarea, copiarlo y luego os posicionáis en el nodo, copiáis el HTML y con el XPath y el XSL vais cogiendo la información que os va interesando y filtrando por lo que necesitéis. 331 00:32:21,779 --> 00:32:24,119 ya sabéis que los filtros pues podéis hacer 332 00:32:24,119 --> 00:32:27,500 modo if o modo if else 333 00:32:27,500 --> 00:32:30,019 vale, y con eso 334 00:32:30,019 --> 00:32:32,759 ya tendréis suficiente 335 00:32:32,759 --> 00:32:35,960 así que nada, pues 336 00:32:35,960 --> 00:32:39,900 que se os dé bien la unidad y la tarea y nos vemos en la próxima 337 00:32:39,900 --> 00:32:42,299 sesión, adiós