Transformar etiquetas XML en texto
Frecuentes
Visto 106 veces
2
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 !
2 Respuestas
2
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
1
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 xml xslt or haz tu propia pregunta.
¿Podría proporcionar el resultado deseado? - Kirill Polishchuk
mira esta publicación stackoverflow.com/questions/1525285/xslt-mixed-content-node , te ayuda? - A.B.Cade
@KirillPolishchuk - ver mi edición. - Matt Huggins