![]() |
Crear formulario desde XML usando XSLT <xsl:value-of select="./ListaD/nombre"/>: <select> <xsl:attribute name="name"><xsl:value-of select="./ListaD/name"/></xsl:attribute> <xsl:for-each select="form/cont/ListaD/value"> <option> <xsl:attribute name="value"><xsl:value-of select="./ListaD/value"/></xsl:attribute><xsl:value-of select="./ListaD/value"/> </option> </xsl:for-each> </select> El anterior código en XSLT es para modificar un XML de la forma : <ListaD> <nombre>...</nombre> <name>...</name> <value>...</value> <value>...</value> ... <value>...</value> </ListaD> Deseo modificar el XML y crear el HTML que contenga un control de tipo Lista desplegable con las características que indico. Por favor no logro realizarlo, gracias. |
La estructura XML que has escogido no parece del todo intuitiva para lo que quieres representar. Se puede modificar o tiene que seresa estructura XML forzosamente? Yo propondría una estructura de esta forma: <ListaD> <nombre>...</nombre> <elem> <name>...</name> <value>...</value> </elem> <elem> <name></name> <value>...</value> </elem> ... </ListaD> Como ves, he agrupado los pares <name><value> en elementos <elem>. Por cada <elem> se generaría el equivalente html a <option>. Es eso lo que quieres? |
Tampoco logro solucionarlo así...me aparece el nombre pero no me aparecen los elementos!!! <xsl:for-each select="./Checkbox/element"> <input type="checkbox"> <xsl:attribute name="name"><xsl:value-of select="./Checkbox/element/name"/></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="./Checkbox/element/value"/></xsl:attribute> </input> </xsl:for-each> |
Y me ocurre lo mismo con los checkbox, lista desplegable y radio(en los q puede haber varios valores) |
A ver... ese codigo que has puesto no tiene nada que ver con el XML... Por que no haces una cosa? Pon un ejemplo de XML que realmente estás usando y tu código XSL que lo recorre. Seguramente estás indicando mal las rutas XPath en tu XSL. Besos |
CÓDIGO XSLT <xsl:for-each select="./Checkbox/elemento"> <td> <input type="checkbox"> <xsl:attribute name="name"><xsl:value-of select="./Checkbox/elemento/name"/></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="./Checkbox/elemento/value"/></xsl:attribute> </input> </td> <td> :arriba: <xsl:value-of select="./Checkbox/elemento/value"/> </td> ACTÚA SOBRE EL XML <Checkbox> <nombre>Checkbox3</nombre> <elemento> <name>check</name> <value>opcion uno</value> </elemento> <elemento> <name>check</name> <value>opcion dos</value> </elemento> <elemento> <name>check</name> <value>opcion tres</value> </elemento> </Checkbox> Cuando intento ver el resultado me aparecen las casillas del checkbox dibujadas las puedo tickar, pero no me aparece la descripcion de cada una a vista del usuario, que es lo que intento hacer con la línea marcada con el icono. el mismo problema tengo con las listas desplegables y los botones radio, a vista del usuario no hay descipción. También, si tengo varias listas o varios radios me los agrupa todos en uno aunq tengan nombres diferentes. Todos los controles estan agrupados entre las etiquetas <control>...</control> y comprubo que control es con <xsl:if test="Checkbox"> Gracias, estoy muy perdida. Gracias. |
Hola! A ver... exactamente no se que le pasaba a tu codigo pero el utilizar las rutas XPath de la forma ./Checkbox/elemento/name no es la mas apropiada.. y como tu código no era completo no he podido generarte un codigo acorde a ese tipo de rutas. Te he reconstruido tu XSL con templates para que no dependan las rutas XPATH del nodo en el que te encuentres y el codigo es mas claro haciendolo de esta forma (al menos para mi). Lo he probado y funciona perfectamente. Código: <?xml version="1.0" encoding="iso-8859-1"?> |
Al tener varios controles el apply templates debo redirigirlo a todos? El código completo es: <?xsl version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="formulario/titulo"/></title> </head> <body> <h3><xsl:value-of select="formulario/comentarios"/></h3> <form> <xsl:attribute name="action">procesar.jsp?idForm=<xsl:value-of select="formulario/id"/></xsl:attribute> </form> <link> <xsl:attribute name="href"><xsl:value-of select="formulario/formato"/></xsl:attribute> </link> <xsl:for-each select="formulario/controles"> <xsl:if test="LineaTexto"> <p> <tr> <td align="center"> <xsl:value-of select="./LineaTexto/nombre"/>: </td> <td align="center"> <input type="text" > <xsl:attribute name="name"><xsl:value-of select="./LineaTexto/name"/></xsl:attribute> <xsl:attribute name="size"><xsl:value-of select="./LineaTexto/size"/></xsl:attribute> <xsl:attribute name="maxlength"><xsl:value-of select="./LineaTexto/maxlength"/></xsl:attribute> </input> </td> </tr> </p> </xsl:if> <xsl:if test="AreaTexto"> <p> <tr> <td> <xsl:value-of select="./AreaTexto/nombre" />: </td> <td align="center"> <textarea> <xsl:attribute name="name"><xsl:value-of select="./AreaTexto/name"/></xsl:attribute> <xsl:attribute name="rows"><xsl:value-of select="./AreaTexto/rows"/></xsl:attribute> <xsl:attribute name="cols"><xsl:value-of select="./AreaTexto/cols"/></xsl:attribute> <xsl:value-of select="./AreaTexto/textoDefecto" /> </textarea> </td> </tr> </p> </xsl:if> <xsl:if test="Checkbox"> <p> <tr> <td> <xsl:value-of select="./Checkbox/nombre"/>: </td> <td> <xsl:for-each select="./Checkbox/elemento"> <tr> <td> <input type="checkbox"> <xsl:attribute name="name"><xsl:value-of select="./Checkbox/elemento/name"/></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="./Checkbox/elemento/value"/></xsl:attribute> </input> </td> <td> <xsl:value-of select="./Checkbox/elemento/value"/> </td> </tr> </xsl:for-each> </td> </tr> </p> </xsl:if> <xsl:if test="Password"> <p> <tr> <td> <xsl:value-of select="./Password/nombre"/>: </td> <td> <input type="password"> <xsl:attribute name="name"><xsl:value-of select="./Password/name"/></xsl:attribute> <xsl:attribute name="size"><xsl:value-of select="./Password/size"/></xsl:attribute> <xsl:attribute name="maxlength"><xsl:value-of select="./Password/maxlength"/></xsl:attribute> </input> </td> </tr> </p> </xsl:if> <xsl:if test="ListaDesplegable"> <p> <tr> <td> <xsl:value-of select="./ListaDesplegable/nombre"/>: </td> <td> <select> <xsl:attribute name="name"><xsl:value-of select="./ListaDesplegable/name"/></xsl:attribute> <xsl:for-each select="./ListaDesplegable/elemento"> <option> <xsl:attribute name="value"><xsl:value-of select="./ListaDesplegable/elemento/value"/></xsl:attribute><xsl:value-of select="./ListaDesplegable/elemento/valueus"/> </option> </xsl:for-each> </select> </td> </tr> </p> </xsl:if> <xsl:if test="Radio"> <p> <tr> <td> <xsl:value-of select="./Radio/nombre"/>: </td> <td> <xsl:for-each select="./Radio/value"> <input type="radio"> <xsl:attribute name="name"><xsl:value-of select="./Radio/name"/></xsl:attribute> <xsl:attribute name="value"><xsl:value-of select="./Radio/value"/></xsl:attribute> </input> </xsl:for-each> </td> </tr> </p> </xsl:if> <xsl:if test="Submit"> <p> <tr> <td> <input type="submit"> <xsl:attribute name="value"><xsl:value-of select="./Submit/nombre"/></xsl:attribute> <xsl:attribute name="action"><xsl:value-of select="./Submit/action"/></xsl:attribute> </input> </td> </tr> </p> </xsl:if> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> |
Y mi XML es de la forma: <?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet href="Formularios.xsl" type="text/xsl" ?> <formulario> <titulo>Formulario numero tres</titulo> <comentarios>Formulario de prueba</comentarios> <formato>Opcion1.css</formato> <id>2</id> <controles> <ListaDesplegable> <nombre>Lista1</nombre> <name>lista</name> <elemento> <value>Uno</value> <valueus>Uno</valueus> </elemento> <elemento> <value>Dos</value> <valueus>Dos</valueus> </elemento> <elemento> <value>Tres</value> <valueus>Tres</valueus> </elemento> <elemento> <value>Cuatro</value> <valueus>Cuatro</valueus> </elemento> </ListaDesplegable> <Checkbox> <nombre>Checkbox3</nombre> <elemento> <name>check</name> <value>opc1</value> </elemento> <elemento> <name>check</name> <value>opc2</value> </elemento> <elemento> <name>check</name> <value>opc3</value> </elemento> </Checkbox> <ListaDesplegable> <nombre>Lista2</nombre> <name>listad</name> <elemento> <value>positivo</value> <valueus>positivo</valueus> </elemento> <elemento> <value>negativo</value> <valueus>negativo</valueus> //valueus: valor a la viste del usuario </elemento> </ListaDesplegable> <LineaTexto> <nombre>Linea1</nombre> <name>linea</name> <size>10</size> <maxlength>10</maxlength> </LineaTexto> <Reset> <nombre>Borrar</nombre> <name>borrar</name> </Reset> </controles> </formulario> |
Ya vi donde tienes el error... Cuando pones <xsl:for-each select="./Checkbox/elemento"> el nodo en el que te encuentras no es el raíz sino elemento. Por tanto, cuando quiereas sacar el valor de las etiqeutas name y value debes poner: <xsl:value-of select="name/text()" /> y <xsl:value-of select="value/text()" /> Es eso lo que estaba mal. Besos |
Muchísimas gracias Helbira. Era un tema que me traía loca. Mil gracias. Besos, Carla |
De ná, niña! Besos |
Ahí llevas el código de tu XSL. Tienes arreglado el tema que no te agrupe cada tipo de control del formualrio sino que te aparezcan en el orden en que vienen en el XML. Creo que es eso lño que querias. Código: <?xml version="1.0" encoding="iso-8859-1"?> |
Gracias, ya me lo muestra bien. Aún así no funcionan los botones, ni aplica la plantilla CSS. Un beso |
A ver que código HTML estás generando para los botones y la plantilla CSS... Tendrás algo mal. |
En el parámetro action del jsp quiero que pase a la página Procesar y le pase el valor idForm(incluido en la qtiqueta id del xml): <form> <xsl:attribute name="action">Procesar.jsp?idForm=<xsl:value-of select="formulario/id/text()"/></xsl:attribute> </form> me pasa a dicha página pero en ella intento acceder a idForm y no lo reconoce. Gracias. |
Pasa el idForm en vez de por Request en la URL hazlo desde un <input type="hidden"> y usa el atributo method del formulario como tipo POST en vez de GET BEsos |
un saludo y muchas gracias!! me ha sido de utilidad la info posteada.... :) |
;P Menos mal!... le dediqué mi tiempo. |
| La zona horaria es GMT -6. Ahora son las 06:43. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.