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

Problema al concatenar elementos de una ruta

Estas en el tema de Problema al concatenar elementos de una ruta en el foro de Programación General en Foros del Web. si tengo las siguientes variables <xsl:variable name ="ruta">/raiz/datos/juan</xsl:variable> <xsl:variable name = "campo">/personal/@estadocivil</xsl:variable> quiero obtener el valor que se haya en /raiz/datos/juan/personal/@estadocivil si utilizo <xsl:value-of select="concat($ruta,$campo)"> ...
  #1 (permalink)  
Antiguo 20/08/2004, 07:22
 
Fecha de Ingreso: mayo-2004
Mensajes: 8
Antigüedad: 20 años, 6 meses
Puntos: 0
Problema al concatenar elementos de una ruta

si tengo las siguientes variables
<xsl:variable name ="ruta">/raiz/datos/juan</xsl:variable>
<xsl:variable name = "campo">/personal/@estadocivil</xsl:variable>

quiero obtener el valor que se haya en
/raiz/datos/juan/personal/@estadocivil
si utilizo <xsl:value-of select="concat($ruta,$campo)">
me devuelve la ruta pero no el valor contenido en la ruta.
¿Existe alguna forma de obtener de este modo el valor contenido en la ruta en lugar de la ruta por si misma?
  #2 (permalink)  
Antiguo 24/08/2004, 04:43
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
Reconozco que me ha costado

A ver si te vale esta solución

prueba.xml
Código:
<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="prueba.xsl"?> 
<raiz> 
   <datos>
	 <juan>
	   <personal estadocivil="soltero">
		 JUAN		 
	   </personal>
	 </juan>
   </datos> 
</raiz>

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:template match="/">
	<xsl:variable name="ruta">/raiz/datos/juan</xsl:variable>
	<xsl:variable name="campo">/personal</xsl:variable>
	<xsl:variable name="ultimo">
	  <xsl:call-template name="getLast">
		<xsl:with-param name="ruta">
		  <xsl:value-of select="concat($ruta,$campo)" />
		</xsl:with-param>
	  </xsl:call-template>
	</xsl:variable>
	<xsl:value-of select="//*[name()=$ultimo]" />
  </xsl:template>
<xsl:template name="getLast">
  <!-- Recorremos la ruta y nos quedamos con el nombre 
	-+ de la etiqueta más profunda en la ruta indicada -->
  <xsl:param name="ruta" />
  <xsl:param name="pattern" select="'/'" />
 <xsl:choose>
   <xsl:when test="contains($ruta, $pattern)">
	  <xsl:variable name="ultimo">
		<xsl:value-of select="substring-after($ruta,$pattern)" />
	  </xsl:variable>
	  <xsl:choose>
		<xsl:when test="not(contains($ultimo,$pattern)) and $ultimo!=''">
		  <xsl:value-of select="$ultimo" />
		</xsl:when>
		<xsl:otherwise>
		  <xsl:call-template name="getLast">
		 <xsl:with-param name="ruta" select="substring-after($ruta, $pattern)" />
		</xsl:call-template>
	  </xsl:otherwise>
	  </xsl:choose>
   </xsl:when>
   <xsl:otherwise>
	  <xsl:value-of select="$ruta" />
   </xsl:otherwise>
 </xsl:choose>
</xsl:template>
</xsl:stylesheet>
Aviso! El caso en que quieras consultar el valor de un atributo no lo contempla. Completalo tú para que trate también el caso de vlores de atributos.
Tendrías que tocar el template "getLast".

Suerte!
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




La zona horaria es GMT -6. Ahora son las 15:25.