XSL - Acceso a subnodos en XSL

 
Vista:

Acceso a subnodos en XSL

Publicado por Maria Rosa (1 intervención) el 04/05/2006 09:29:44
Hola a todos tengo un XML que tiene la siguiente estrucutra(generado por el portal Liferay):

<root>
<dynamic-element name=\'MiSeleccion\' type=\'list\'>
<dynamic-element name=\'o1\' type=\'Mi primera opcion\'> </dynamic-element>
<dynamic-element name=\'o2\' type=\'Mi segunda opción\'></dynamic-element>
</dynamic-element>
<dynamic-element name=\'MiTexto\' type=\'text\'>
<dynamic-element name=\'MiSegundoTexto\' type=\'text\'></dynamic-element>
</dynamic-element>
<dynamic-element name=\'MiHtml\' type=\'text_area\'></dynamic-element>
<dynamic-element name=\'MiImagen\' type=\'image\'></dynamic-element>
</root>

quiero en a través del XSL también me aparezca en el navegardor MiSegundoTexo que está dentro de MiTexo, he hecho lo siguiente pero no me aparece:

<?xml version=\"1.0\"?>

<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">
<xsl:output method=\"html\" omit-xml-declaration=\"yes\"/>

<xsl:variable name=\"imagen\">
<xsl:value-of disable-output-escaping=\"yes\" select=\"root/dynamic-element[@name=\'MiImagen\']/dynamic-content\"/>
</xsl:variable>

<xsl:variable name=\"texto\">
<xsl:value-of disable-output-escaping=\"yes\" select=\"root/dynamic-element[@name=\'MiHtml\']/dynamic-content\"/>
</xsl:variable>

<xsl:variable name=\"segundotexto\">
<xsl:value-of disable-output-escaping=\"yes\" select=\"root/dynamic-element[@name=\'MiTexto\']/dynamic-element[@name=\'MiSegundoTexto\']/dynamic-content\"/>
</xsl:variable>

<xsl:template match=\"/\">
<xsl:call-template name=\"common-content\"/>
</xsl:template>

<xsl:template name=\"common-content\">
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td>
<xsl:value-of select=\"root/dynamic-element[@name=\'MiTexto\']/dynamic-content\"/>
</td>
<td>
<xsl:value-of disable-output-escaping=\"yes\" select=\"$segundotexto\"/>
</td>
</tr>
<tr>
<td>
<xsl:value-of disable-output-escaping=\"yes\" select=\"$texto\"/>
</td>
</tr>
<tr>
<td>
<xsl:if test=\"$imagen != \'\'\">
<img>
<xsl:attribute name=\"src\">
<xsl:value-of disable-output-escaping=\"yes\" select=\"$imagen\"/>
</xsl:attribute>
</img>
</xsl:if>
</td>
</tr>
<tr>
<td>
<xsl:value-of select=\"root/dynamic-element[@name=\'MiSeleccion\']/dynamic-content\"/>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>

Alguien puede ayudarme?.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo acceder correctamente al contenido dinámico en un XML de Liferay

Publicado por Alejandro (227 intervenciones) el 05/07/2023 21:48:33
El problema que estás experimentando parece ser causado por cómo estás accediendo al contenido dinámico dentro de los elementos en tu XML.

En lugar de utilizar la ruta completa para acceder al contenido dinámico, puedes utilizar un enfoque más sencillo y directo. Aquí tienes una solución modificada para tu problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" omit-xml-declaration="yes"/>
 
  <xsl:template match="/">
    <xsl:call-template name="common-content"/>
  </xsl:template>
 
  <xsl:template name="common-content">
    <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td>
          <xsl:value-of select="root/dynamic-element[@name='MiTexto']/dynamic-content/dynamic-element[@name='MiSegundoTexto']/dynamic-content"/>
        </td>
      </tr>
      <tr>
        <td>
          <xsl:value-of select="root/dynamic-element[@name='MiHtml']/dynamic-content"/>
        </td>
      </tr>
      <tr>
        <td>
          <xsl:if test="root/dynamic-element[@name='MiImagen']/dynamic-content != ''">
            <img src="{root/dynamic-element[@name='MiImagen']/dynamic-content}" />
          </xsl:if>
        </td>
      </tr>
      <tr>
        <td>
          <xsl:value-of select="root/dynamic-element[@name='MiSeleccion']/dynamic-content"/>
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>

En este código, hemos modificado la forma en que accedes al contenido dinámico dentro de los elementos. Utilizamos una ruta más específica y directa, evitando el uso de variables adicionales.

Espero que esta solución resuelva tu problema y que puedas obtener el valor de "MiSegundoTexto" correctamente. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar