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

problemilla rapido de arreglar

Estas en el tema de problemilla rapido de arreglar en el foro de Programación General en Foros del Web. Tengo un pequeño problemilla con un ejercicio que tengo que hacer aver si me podeis explicar porque no funciona. tengo un xml con la siguiente ...
  #1 (permalink)  
Antiguo 30/12/2004, 13:03
 
Fecha de Ingreso: diciembre-2004
Mensajes: 5
Antigüedad: 19 años, 10 meses
Puntos: 0
Pregunta problemilla rapido de arreglar

Tengo un pequeño problemilla con un ejercicio que tengo que hacer aver si me podeis explicar porque no funciona.

tengo un xml con la siguiente estructura


cutre verdad?

pego aki un xsl que he creado
--------------------XSL------------------------
Código:
<?xml version='1.0' encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<HTML>
			<HEAD><TITLE>P5</TITLE></HEAD>
				<BODY>
					<xsl:for-each select="/biblioteca/usuarios/usuario">
						<P><B>Usuario: </B><xsl:value-of select="nombre"/>  
						   <B>Dni: </B><xsl:value-of select="@dni"/></P>
						   <xsl:for-each select="prestamos/prestamo">
									<xsl:value-of select="@isbn"/>*
									<xsl:for-each select="/biblioteca/libros/materia">
										<xsl:for-each select="libro">
											<xsl:if test="@isbn = ../../usuarios/usuario/@isbn">
												<xsl:value-of select="@isbn"/>*L*
											</xsl:if>
										</xsl:for-each>
									</xsl:for-each>
						   </xsl:for-each>
					</xsl:for-each>
			</BODY>
		</HTML>
	</xsl:template>
</xsl:stylesheet>

La idea es que para cada usuario cojer el codigo del libro que ha sacado de la biblioteca luego ir a los libros de la biblioteca y si el libro existe que lo imprima. por alguna razon no funciona el if y nose porque.
si le quito el if me imprime por cada codigo de libro del usuario todos los libros de la biblioteca, sin embargo yo solo kiero q imprima los q coinciden con el que el susodicho usuario a sakado.
ah! se me olvidaba que los codigos del libro son atributos de libro y de prestamo con el nombre isbn


nose si me e explicado con claridad pero es jodida la cosa. aver si alguien me puede ayudar y muchas gracias
  #2 (permalink)  
Antiguo 30/12/2004, 22:14
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 11 meses
Puntos: 0
Hola,
por lo que veo en el xsl, utilizas el nodo "materia" que no esta definido en la estructura que dibujaste, segundo el if no tiene sentido porque no existe el atributo isbn en el nodo usuario.
La solución a la que llegue es esta:

Xml de ejemplo basado en tu dibujo:
Código:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="biblioteca.xsl"?>
<biblioteca>
	<libros>
		<libro isbn="L1">
			<titulo>Titulo1</titulo>
			<autor>Autor1</autor>
		</libro>
		<libro isbn="L2">
			<titulo>Titulo2</titulo>
			<autor>Autor2</autor>
		</libro>
		<libro isbn="L3">
			<titulo>Titulo3</titulo>
			<autor>Autor3</autor>
		</libro>
		<libro isbn="L4">
			<titulo>Titulo4</titulo>
			<autor>Autor4</autor>
		</libro>
		<libro isbn="L5">
			<titulo>Titulo5</titulo>
			<autor>Autor5</autor>
		</libro>
	</libros>
	<usuarios>
		<usuario dni="20000001">
			<nombre>Nombre1</nombre>
			<prestamos>
				<prestamo isbn="L1">
					<fecha_prestamo>1/1/2004</fecha_prestamo>
					<retraso>1</retraso>
				</prestamo>
				<prestamo isbn="L6">
					<fecha_prestamo>2/1/2004</fecha_prestamo>
					<retraso>2</retraso>
				</prestamo>
			</prestamos>
		</usuario>
		<usuario dni="20000002">
			<nombre>Nombre2</nombre>
			<prestamos>
				<prestamo isbn="L3">
					<fecha_prestamo>2/2/2004</fecha_prestamo>
					<retraso>2</retraso>
				</prestamo>
			</prestamos>
		</usuario>
		<usuario dni="20000003">
			<nombre>Nombre3</nombre>
			<prestamos>
				<prestamo isbn="L4">
					<fecha_prestamo>1/1/2004</fecha_prestamo>
					<retraso>1</retraso>
				</prestamo>
				<prestamo isbn="L8">
					<fecha_prestamo>1/2/2004</fecha_prestamo>
					<retraso>1</retraso>
				</prestamo>
				<prestamo isbn="L1">
					<fecha_prestamo>1/3/2004</fecha_prestamo>
					<retraso>2</retraso>
				</prestamo>
			</prestamos>
		</usuario>
	</usuarios>
</biblioteca>
Xsl:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
	<xsl:template match="/">
		<html>
			<head>
				<title>P5</title>
			</head>
			<body>
				<xsl:apply-templates select="/biblioteca/usuarios/usuario"/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="/biblioteca/usuarios/usuario">
		<p>
			<strong>Usuario: </strong><xsl:value-of select="nombre"/>
			<br/>
			<strong>D.N.I.: </strong><xsl:value-of select="@dni"/>
		</p>
		<ol>
			<xsl:call-template name="prestamos">
				<xsl:with-param name="libros" select="prestamos/prestamo/@isbn"/>
			</xsl:call-template>
		</ol>
	</xsl:template>
	<xsl:template name="prestamos">
		<xsl:param name="libros"/>
		<xsl:for-each select="/biblioteca/libros/libro[@isbn=$libros]">
			<li><xsl:value-of select="@isbn"/></li>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
Resultado:
Código HTML:
<?xml version="1.0" encoding="utf-8"?>
<html>
	<head>
		<title>P5</title>
	</head>
	<body>
		<p><strong>Usuario: </strong>Nombre1<br/><strong>D.N.I.: </strong>20000001</p>
		<ol>
			<li>L1</li>
		</ol>
		<p><strong>Usuario: </strong>Nombre2<br/><strong>D.N.I.: </strong>20000002</p>
		<ol>
			<li>L3</li>
		</ol>
		<p><strong>Usuario: </strong>Nombre3<br/><strong>D.N.I.: </strong>20000003</p>
		<ol>
			<li>L1</li>
			<li>L4</li>
		</ol>
	</body>
</html> 
Los libros L6 del primer usuario y L8 del tercero no los muestra porque no estan en la lista de libros.

Saludos
  #3 (permalink)  
Antiguo 31/12/2004, 04:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 5
Antigüedad: 19 años, 10 meses
Puntos: 0
Estoi en deuda contigo Ktion voi a ver si lo entiendo, todavia no lo e mirado pero solo la molestia q te as tomado merece q gracias aunque tiene una pinta cojonuda.

gracias de nuevo por las molestias
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 14:21.