Transformar etiquetas XML en texto

Digamos que tengo un nodo XML como el siguiente:

<item id="20">
    <name>Baz</name>
    <description>
        If you liked this, you should check out <related id="5">Foo</related>
        and <related id="7">Bar</related>!
    </description>
<item>

Al generar la descripción a través de XSLT, quiero el text() ser renderizado de tal manera que cada uno de los <related> los nodos se convierten en etiquetas de anclaje. ¿Cómo haría yo para hacer esto?

Edit: Salida deseada agregada por solicitud de Kirill. Me gustaría que se pareciera a esto:

Si te gustó esto, ¡deberías visitar Foo and Bar !

preguntado el 23 de enero de 12 a las 16:01

¿Podría proporcionar el resultado deseado? -

@KirillPolishchuk - ver mi edición. -

2 Respuestas

Cree una plantilla que anule el manejo predeterminado para related elementos:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="related">
        <a href="/es/items/{@id}"><xsl:value-of select="."/></a>
    </xsl:template>
</xsl:stylesheet>

Salida:

<item id="20">
    <name>Baz</name>
    <description>
        If you liked this, you should check out <a href="/es/items/5">Foo</a>
        and <a href="/es/items/7">Bar</a>!
    </description>
</item>

Este es un patrón XSLT fundamental. La primera plantilla implementa la Transformación de identidad, que copia la mayoría de los nodos sin cambios. La segunda plantilla anula la primera en el caso de related elementos, convirtiéndolos en anclajes HTML.

Respondido el 23 de enero de 12 a las 20:01

Hay un similar post
aquí hay un ejemplo para su caso

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
 <xsl:apply-templates select="//description" />
  </body>
  </html>
</xsl:template>

<xsl:template match="//description">
    <p>
<xsl:apply-templates />
    </p>
  </xsl:template>


 <xsl:template match="description//text()">
<xsl:copy-of select="." />
  </xsl:template>

<xsl:template match="description//related">
     <a><xsl:attribute name="href">
    /items/<xsl:value-of select="@id" />
  </xsl:attribute>
<xsl:apply-templates />
    </a>
  </xsl:template>
</xsl:stylesheet>

no está limpio, tendrás que trabajar en ello, pero es un comienzo

Respondido el 23 de enero de 12 a las 20:01

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