Transformación XSLT - Múltiples bloques con diferentes valores de atributo

Tengo que convertir de un archivo XML (XHTML) a otro usando XSLT. Las reglas de transformación son:

  1. Los valores de id="t0b" y "t1b" deben reemplazarse con id="ta0b8" y "ta3b8" respectivamente.
  2. <input type="radio" name="o0" id="t0"/> tiene que ser reemplazado por <input type="radio" name="key0b8" value="0" id="ta0q" class="block" /> (Y así mismo en el archivo)

Fichero de entrada:

<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-type" content="text/html;  charset=utf-8" />
    </head>  
    <body>
      <div class="iDev">

        <div class="q">
          <div id="t0b" class="block">1<span style="color">TEXT1</span>
          </div><br />
          T <input type="radio" name="o0" id="t0"/> 
          F <input type="radio" name="op0" id="f0"/>
          <div id="sfb"></div>
        </div><br />

        <div class="q">
          <div id="t1b" class="block">2<span style="color">TEXT2</span>
          </div><br />
          T <input type="radio" name="o1" id="t1" /> 
          F <input type="radio" name="op1" id="f1" />
          <div id="sfb"></div>
        </div>
      </div>
    </body>
    </html>

Archivo de salida:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;  charset=utf-8" />
</head>
<body>
  <div class="iDev">

    <div class="q">
      <div id="ta0b8" class="block">1<span style="color">TEXT1</span>
      </div><br />
      T<input type="radio" name="key0b8" value="0" id="ta0q" />
      F<input type="radio" name="key0b8" value="1" id="ta1q" />
      <div id="sfb"></div>
    </div><br />

    <div class="q">
      <div id="ta3b8" class="block">2 <span style="color">TEXT2</span>
      </div><br />
      T<input type="radio" name="key3b8" value="0" id="ta0q3" />
      F<input type="radio" name="key3b8" value="1" id="ta1q3" />
      <div id="sfb"></div>
    </div>
  </div>
</body>
</html>

Puedo modificar cuando solo hay un bloque de <div class="q">CODE HERE</div> al usar la plantilla de identidad y las sugerencias en el foro, pero cuando el bloque se repite varias veces con diferentes valores de sus atributos, no puedo hacerlo. Por favor, ayúdame a lograr esta tarea. Agradeciéndote.

preguntado el 31 de julio de 12 a las 14:07

1 Respuestas

La regla 1 puede ser implementada por...

<xsl:template match="div[@id='t0b']">
  <xsl:copy>
   <xsl:copy-of select="@*" />
   <xsl:attribute name="id">ta0b8</xsl:attribute>
   <xsl:apply-templates select="node()" />
  </xsl:copy>
</xsl:template>

... y de manera similar para el otro elemento div.

La regla 2 puede ser implementada por...

<xsl:template match="input[@name='o0']">
  <xsl:copy>
   <xsl:copy-of select="@*" />
   <xsl:attribute name="name">key0b8</xsl:attribute>
   <xsl:attribute name="value">0</xsl:attribute>
   <xsl:attribute name="id">ta0q</xsl:attribute>
   <xsl:attribute name="class">block</xsl:attribute>
   <xsl:apply-templates select="node()" />
  </xsl:copy>
</xsl:template>

Respondido 31 Jul 12, 15:07

Muchas gracias por la respuesta. :) - RahulD

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