Uso de un enlace en archivos XSL

Soy completamente nuevo en XML, así que espero que mis explicaciones tengan sentido.

Estoy usando un archivo XSL con 2 secciones de texto HTML, leyendo de 2 plantillas configuradas dentro del archivo.

El primer texto y la plantilla asociada es una tabla, y he configurado un enlace dentro de eso. Quiero que el enlace apunte a una imagen que sea parte del segundo texto/plantilla HTML.

El enlace en la tabla está configurado en el sentido de que aparece como un enlace, subrayado, etc. Sin embargo, no va a ninguna parte cuando se hace clic en él.

La segunda sección funciona bien por sí sola, por ejemplo, aparecen imágenes y texto.

Pero lo que no puedo entender es cómo hacer que el enlace funcione. He probado muchas cosas pero nada ha funcionado hasta ahora. Y no estoy seguro de si estoy muy cerca y quizás solo necesite modificar una línea de código. O si necesito estar haciendo algo muy diferente. Además, no hay mensajes de error y todo se muestra bien, es solo el enlace el que no funciona.

 <xsl:template match="portion">
  <tr>
 <td valign="top"><xsl:value-of select="food-description"/></td>
 <td valign="top"><xsl:value-of select="food-number"/></td>
 <!--the following is the link text-->  
 <td valign="top"><a><xsl:attribute name="href">#<xsl:value-of select="portion-     photo/@file"/></xsl:attribute>
 <xsl:value-of select="portion-photo/@file"/></a><br/>
 </td>
 </tr>
 </xsl:template>


 <xsl:template match="portion-photo">
 <!--I know that this is the code that is not correct, however, believe it should      be something similar-->  
 <a><xsl:attribute name="portion-photo"><xsl:value-of select="./@file"/></xsl:attribute></a>  

 <p><xsl:value-of select="../food-description"/>
 <xsl:value-of select="./@file"/></p>

 <img>
   <xsl:attribute name="src"><xsl:value-of select="./@file"/></xsl:attribute>
   <xsl:attribute name="width"><xsl:value-of select="ceiling(./@w div v2)"/></xsl:attribute>
   <xsl:attribute name="height"><xsl:value-of select="ceiling(./@h div 2)"/></xsl:attribute>
  </img>
 </xsl:template>

preguntado el 03 de mayo de 12 a las 15:05

¿Es este su script XSLT original? Si es así, es posible que desee eliminar el espacio en blanco entre parte- y en la selectatributo del tercero xsl:value-of. Por cierto, puede agregar directamente valores de atributo sin usar xsl:attribute. Simplemente ponga las expresiones XPath entre llaves: <a href="#{portion-photo/@file}"/> -

Ha olvidado proporcionar el XML de origen; edite la pregunta y hágalo. Además, especifique el resultado deseado exacto para el XML que proporciona. -

Sí, lo creé si eso es lo que está preguntando usando varios códigos que he visto/leído. el espacio en blanco solo está allí debido a la forma en que lo copié aquí. no esta en el original re> me da mensajes de error. ¿Cambiar/agregar eso hace alguna diferencia para que los enlaces funcionen? -

@Dimitre. Aquí hay un extracto. Arroz 1 -

@KGreen: No, no es una porción sino un documento XML completo (y pequeño). Y no en un comentario: edite la pregunta y proporcione los datos importantes que faltan allí; esta también puede ser una oportunidad para corregir los errores tipográficos conocidos actualmente. -

1 Respuestas

Algo como lo siguiente debería funcionar. Solo agrega lo que falta nombre atributo al elemento ancla:

<xsl:template match="portion">
  ...
  <a href="#{portion-photo/@file}">
    <xsl:value-of select="portion-photo/@file"/>
  </a>
  ...
</xsl:template>

<xsl:template match="portion-photo">
  <a name="{@file}">
    <xsl:value-of select="@file"/>
  </a>
</xsl:template>

Sin embargo, debe asegurarse de que @file se evalúa como un nombre de anclaje válido. Si los valores de todos presentar los atributos son únicos, también puede crear ID de guardado con generate-id():

<xsl:template match="portion">
  ...
  <a href="#{generate-id(portion-photo)}">
    <xsl:value-of select="portion-photo/@file"/>
  </a>
  ...
</xsl:template>

<xsl:template match="portion-photo">
  <a name="{generate-id()}">
    <xsl:value-of select="@file"/>
  </a>
</xsl:template>

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.