Foros del Web » Programación para mayores de 30 ;) » Programación General »

Utilizar varios ficheros xml con un fichero xsl

Estas en el tema de Utilizar varios ficheros xml con un fichero xsl en el foro de Programación General en Foros del Web. Hola a todos!!!! Me ha surgido una pregunta, como puedo utilizar en un fichero xsl varios ficheros xml, es decir,en un fichero xsl tengo que ...
  #1 (permalink)  
Antiguo 18/10/2004, 06:42
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Utilizar varios ficheros xml con un fichero xsl

Hola a todos!!!!

Me ha surgido una pregunta, como puedo utilizar en un fichero xsl varios ficheros xml, es decir,en un fichero xsl tengo que recojer informacion de varios ficheros xml, mi pregunta es si se puede hacer y si se puede, como puedo utilizar xsl:value-of,... es decir como recojer la informacion de ficheros xml distintos.

Muchas gracias!!!!
  #2 (permalink)  
Antiguo 20/10/2004, 03:06
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola!!

Si hay alguien que supiera solucionar la duda que he planteado anteriormente me haria un rey.

Muchas gracias!!
  #3 (permalink)  
Antiguo 20/10/2004, 06:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 15
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola Anlobama:

Se puede hacer y de la siguiente forma.

Cargas el documento XML en una variable:
<xsl:variable name="documento_xml" select="document('nombre_doc.xml')"/>

Después usas esta variable como y donde quieras dentro del XSL, utilizando incluso XPath o acceder directamente a los nodos del XML que cargaste...

<xsl:value-of select="$documento_xml/datos"/>

Espero te sirva, Saludos
Alain

http://www.keygroupchile.com (en construrcción)
http://www.insade.cl
http://www.codecor.cl
  #4 (permalink)  
Antiguo 20/10/2004, 12:00
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Muchas gracias alainmacias!!!!

Lo he probado y me funciona perfectamente, no se acuesta uno sin saber algo nuevo, me has echo un rey!!!
  #5 (permalink)  
Antiguo 21/10/2004, 02:34
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Mensaje

Hola alainmacias!!

Como te dije antes, he probado la solucion que me propusiste y me funciona muy bien, pero me he atascado cuando he utilizado dos for-each anidados. T muestro el codigo :

fichero xml comun.xml:

<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/>
<boton nombre="Productos" enlace="">
<subBoton nombre="Piscinas" enlace="piscinas.xml"/>
<subBoton nombre="Fuentes" enlace="fuentes.xml"/>
<subBoton nombre="Bombas de Agua" enlace="piscinas.xml">
<subBoton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<subBoton nombre="Varios" enlace="piscinas.xml">
<subSubBoton nombre="Elementos varios" enlace=""/> <subSubBoton nombre="mangueras" enlace=""/>
<subSubBoton nombre="tuberias" enlace=""/>
</subBoton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/>
<boton nombre="Enlaces" enlace="enlaces.xml"/>
</botonera>


Y el fichero xsl es el siguiente :

......
<xsl:variable name="comunXml" select="document('comun.xml')"/>
......
<xsl:for-each select="//boton">
<xsl:variable name="pos1"> <xsl:value-of select="position()-1"/> </xsl:variable>
<xsl:variable name="numElem1"> <xsl:value-of select="count(subBoton)"/> </xsl:variable>
var <xsl:value-of select="concat('Op_',$pos1)"/> = new seccion("<xsl:value- of select="@nombre"/>","<xsl:value-of select="@enlace"/>",null,<xsl:value- of select="$numElem1"/>)
<xsl:for-each select="subBoton">
<xsl:variable name="pos2"> <xsl:value-of select="position()-1"/> </xsl:variable>
</xsl:for-each>
</xsl:for-each>


.....
he quitado codigo pq era muy largo, en definitiva mi pregunta es que si utilizo dos o tres for-each anidados como puedo hacer referencia a los valores del documento $comunXml.

No se si me he explicado bien, si teneis alguna duda comentarlo.

Gracias.
  #6 (permalink)  
Antiguo 21/10/2004, 11:37
 
Fecha de Ingreso: agosto-2004
Mensajes: 15
Antigüedad: 20 años, 2 meses
Puntos: 0
Anlobama:

Hola pero me perdí un poco, que es lo que no te funciona exactamente? Que error te aparece?

Saludos, Alain
  #7 (permalink)  
Antiguo 22/10/2004, 04:35
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Mensaje ô_Ô

Primero.... tienes un error en el XML, te faltó cerrar una etiqueta <subboton> Te quedaria el XML asi:

Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/> 
<boton nombre="Productos" enlace=""> 
<subBoton nombre="Piscinas" enlace="piscinas.xml"/> 
<subBoton nombre="Fuentes" enlace="fuentes.xml"/>
<subBoton nombre="Bombas de Agua" enlace="piscinas.xml"> 
<subBoton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<subBoton nombre="Varios" enlace="piscinas.xml"> 
	<subSubBoton nombre="Elementos varios" enlace=""/>
	<subSubBoton nombre="mangueras" enlace=""/> 
	<subSubBoton nombre="tuberias" enlace=""/> 
</subBoton>
</subBoton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/> 
<boton nombre="Enlaces" enlace="enlaces.xml"/> 
</botonera>
Hice un ejemplo usando parte de tu código XSL para que lo entiendas. Crea los siguientes 3 archivos en una misma carpeta:

prueba0.xml

Código:
 <?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="prueba.xsl"?>
<root>
Estoy en prueba0.xml
</root>
prueba.xml

Código:
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/> 
<boton nombre="Productos" enlace=""> 
<subBoton nombre="Piscinas" enlace="piscinas.xml"/> 
<subBoton nombre="Fuentes" enlace="fuentes.xml"/>
<subBoton nombre="Bombas de Agua" enlace="piscinas.xml"> 
<subSubBoton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<subSubBoton nombre="Varios" enlace="piscinas.xml"> 
	<subSubSubBoton nombre="Elementos varios" enlace=""/>
	<subSubSubBoton nombre="mangueras" enlace=""/> 
	<subSubSubBoton nombre="tuberias" enlace=""/> 
</subSubBoton>
</subBoton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/> 
<boton nombre="Enlaces" enlace="enlaces.xml"/> 
</botonera>

prueba.xsl

Código:
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="comunXml" select="document('prueba.xml')"/>
<xsl:template match="root">
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
 
<ul>
<xsl:for-each select="$comunXml//boton">
<!-- Ahora estas en prueba.xml, por tanto no tienes 
	+- pq hacer referencia a la variable $comunXml otra vez 
	+- hasta que salgas del bucle 
-->
<li>
	<b>BOTÓN:<xsl:value-of select="@nombre" /></b><br />
	<xsl:variable name="pos1">
	 <xsl:value-of select="position()-1"/>
	</xsl:variable>
	Position:<xsl:value-of select="$pos1" /><br />
	<xsl:variable name="numElem1">
	 <xsl:value-of select="count(subBoton)"/>
	</xsl:variable>
	Núm. subbotones:<xsl:value-of select="$numElem1" /><br />
	<ul>
	 <xsl:for-each select="subBoton">
	 <li>
	 <b>SUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
	 <xsl:variable name="pos2">
		<xsl:value-of select="number(position())-1"/>
	 </xsl:variable>
	 Position:<xsl:value-of select="$pos2" /><br />
	 <xsl:variable name="numElem2">
		<xsl:value-of select="count(subBoton)"/>
	 </xsl:variable>
	 Numero de subbotones:<xsl:value-of select="$numElem2" /><br />
	 <ul>
		 <xsl:for-each select="subSubBoton">
		 <li>
		 <b>SUBSUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
		 <xsl:variable name="pos3">
		 <xsl:value-of select="number(position())-1"/>
		 </xsl:variable>
		 Position:<xsl:value-of select="$pos3" /><br />
		 <xsl:variable name="numElem3">
		 <xsl:value-of select="count(subSubBoton)"/>
		 </xsl:variable>
		 Numero de subSubBotones:<xsl:value-of select="$numElem3" /><br />
		 <ul>
			<xsl:for-each select="subSubSubBoton">
			 <li>
			 <b>SUBSUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
			 <xsl:variable name="pos4">
			 <xsl:value-of select="number(position())-1"/>
			 </xsl:variable>
			 Position:<xsl:value-of select="$pos4" /><br />
			 <xsl:variable name="numElem4">
			 <xsl:value-of select="count(subSubSubBoton)"/>
			 </xsl:variable>
			 Numero de subSubSubBotones:<xsl:value-of select="$numElem4" /><br />
			</li>
		 </xsl:for-each> 
		 </ul>
		 </li>
		</xsl:for-each> 
	 </ul>
	 </li>
	 </xsl:for-each> 
	</ul>
</li>
</xsl:for-each>
</ul>
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
</xsl:template>
</xsl:stylesheet>
He quitado de tu XSL la llamada que haces a new seccion() porque no se realmente que lenguaje usas ahi.. bueno, que me estorbaba para explicarte lo que tenias que hacer.

Al entrar en el primer for-each, sí indicas la variable en la que has cargado el xml de prueba.xml. Una vez que ya estas en ese xml, no te hace falta indicar que te refieres a etiquetas de prueba.xml porque estas "dentro".

Una vez que te salgas del bucle mas externo, sales de prueba.xml . Si quieres volver a entrar debes hacer lo mismo.

Si no entiendes algo pues ya sabes.. pregunta pregunta.

Para probar el ejemplo tan solo tienes que abrir el prueba0.xml en el IExplorer.


Una opinión personal... viendo que <boton>, <subBoton>, <subSubBoton>, <subSubSubBoton>, etc tienen la misma informacion y que ademas tienen una relacion de padres/hijos/nietos... y eso es una burrada hacerlo asi ... podrias simplificar aun mas tu XML y sobre todo el XSL llamandolas de la misma forma, ya que si quieres indicar con subboton que es un hijo de boton, ya lo haces con la estrucutra jerarquica que tienes en el XML.

Te pongo como quedaria el codigo:

prueba.xml

Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/> 
<boton nombre="Productos" enlace=""> 
<boton nombre="Piscinas" enlace="piscinas.xml"/> 
<boton nombre="Fuentes" enlace="fuentes.xml"/>
<boton nombre="Bombas de Agua" enlace="piscinas.xml"> 
<boton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<boton nombre="Varios" enlace="piscinas.xml"> 
	<boton nombre="Elementos varios" enlace=""/>
	<boton nombre="mangueras" enlace=""/> 
	<boton nombre="tuberias" enlace=""/> 
</boton>
</boton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/> 
<boton nombre="Enlaces" enlace="enlaces.xml"/> 
</botonera>
prueba.xsl

Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="comunXml" select="document('prueba.xml')"/>
<xsl:template match="root">
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
<xsl:apply-templates select="$comunXml//boton" />
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
</xsl:template>
 
<xsl:template match="boton">
<ul>
<li>
	<b>BOTÓN:<xsl:value-of select="@nombre" /></b><br />
	Position:<xsl:value-of select="position()-1"/><br />
	Núm. subbotones:<xsl:value-of select="count(boton)" /><br />
	<xsl:for-each select="boton">
	 <xsl:apply-templates select="." />
	</xsl:for-each>
</li>
</ul>
</xsl:template>
</xsl:stylesheet>
Suerte!!
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...

Última edición por Helbira; 22/10/2004 a las 04:46
  #8 (permalink)  
Antiguo 27/10/2004, 09:49
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Perdona helbira por haber tardado tanto en responderte, me ha servido mucho toda tu aclaración. Asi se simplifica mucho el codigo, lo de boton,subboton,... es lo primero que se me ocurrio para poder hacer tres bucles anidados para recorrer todos los botones, subbotones,etc,.. Se que lo he echo un poco lioso pero me funciona y no me atrevo a cambiar el codigo. Pero de tu forma es mucho mas eficiente. Cuadno me preguntas que no sqbes que codigo utilizo, es javascript, se declaran variables con Var, y he tenido que hacer una mezcla de javaScript y xsl para recuperar datos del xml.

Aprobecho para preguntar otra cosillas, es una duda muy tonta pero no me sale.

Tengo esta etiqueta en xml :

<botonera texto="principal">

y en xsl quiero recuperar el atributo text asi :

<xsl:value-of select="/fuente/botonera[@texto]"/>

creo que esta bien pero no me recoje el dato "principal".

Sabes cual puede ser el fallo?

Muchas gracias por toda vuestra ayuda!!!!
  #9 (permalink)  
Antiguo 27/10/2004, 17:27
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
La linea que has puesto efectivamente está mal para lo que quieres hacer:
<xsl:value-of select="/fuente/botonera[@texto]"/> lo que hace es obtener el contenido de la etiqueta botonera si tiene definido un atributo llamado texto. Es decir, lo que colocas entre corchetes es un predicado a evaluar, es decir una condicion que le impones a la ruta xpath que se encuentra justo antes del predicado. Esa ruta xpath que has escrito si le quitamos la condicion es /fuente/botonera y seguro que lo que estas obteniendo es el contenido de la etiqueta botonera, cierto?

Para hacer lo que quieres, es decir, obtener el contenido del atributo texto, la ruta xpath que debes usar es esa misma pero añadiendole el atributo: <xsl:value-of select="/fuente/botonera/@texto" />

mas o menos, no?

Besos
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...

Última edición por Helbira; 27/10/2004 a las 17:29
  #10 (permalink)  
Antiguo 28/10/2004, 02:42
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 20 años, 3 meses
Puntos: 0
Muchas gracias helbira!!!

Seguro que encuentras teletrabajo, eres una maquina!!!!

besos.
  #11 (permalink)  
Antiguo 02/03/2009, 10:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Utilizar varios ficheros xml con un fichero xsl

Cita:
Iniciado por alainmacias Ver Mensaje
Hola Anlobama:

Se puede hacer y de la siguiente forma.

Cargas el documento XML en una variable:
<xsl:variable name="documento_xml" select="document('nombre_doc.xml')"/>

Después usas esta variable como y donde quieras dentro del XSL, utilizando incluso XPath o acceder directamente a los nodos del XML que cargaste...

<xsl:value-of select="$documento_xml/datos"/>

Espero te sirva, Saludos
Alain
Hola a todos! Soy nuevo por aquí, y me ha surgido una duda sobre este tema.

En uno de mis xml que leo con un mismo xsl tengo esta situación:

workflowModel.xml:

<WorkflowModel>
<OrganizationalUnits>
<OrganizationalUnit id="3" name="Delivery department" />
<OrganizationalUnit id="2" name="Accounting department" />
</OrganizationalUnits>
</WorkflowModel>

y en el xsl tengo lo siguiente:

<xsl:variable name="workflowModel" select="document('workflowModel.xml')"/>

<xsl:template match='/'>
<html>
<body>
<h1><xsl:value-of select='$workflowModel/WorkflowModel/OrganizationalUnits/OrganizationalUnit[1]' /></h1>
</body>
</html>
</xsl:template>

No sé como hacer para mostrar por pantalla el atributo "name" de la primera "OrganizationalUnit". He leído en los tutoriales de XPath de w3 que se puede hacer con algo parecido a attribute::name pero no hay ningún ejemplo de cómo hacerlo. Podríais ayudarme?

Muchas gracias y un saludo.
  #12 (permalink)  
Antiguo 03/03/2009, 05:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Utilizar varios ficheros xml con un fichero xsl

Sólo otra duda más:

Conocéis cómo puedo hacer o algún tutorial que pueda seguir para saber como ejecutar una transformación XSLT obteniendo datos desde varios XML de una sola vez? Mi problema es que quisiera transformar 4 xml en uno solo y con otro formato.

Muchas gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:52.