2012-01-23 13 views
6

Estoy creando un pequeño archivo XSL personalizado para generar una fuente RSS. Los contenidos son básicos, de la siguiente manera. Esto funciona a la perfección, excepto cuando el código fuente XML contiene la línea 'xmlns =' http://www.w3.org/2005/Atom '' en la definición del feed. ¿Cómo trato esto? No estoy lo suficientemente familiarizado con los espacios de nombres para saber cómo explicar este caso.Creando XSL para la alimentación Atom

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:template match="/" > 
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> 
    <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE"> 
    <xsl:for-each select="feed/entry"> 
     <div style="background-color:teal;color:white;padding:4px"> 
     <span style="font-weight:bold"><xsl:value-of select="title"/></span> - <xsl:value-of select="author"/> 
     </div> 
     <div style="margin-left:20px;margin-bottom:1em;font-size:10pt"> 
     <b><xsl:value-of select="published" /> </b> 
     <xsl:value-of select="summary" disable-output-escaping="yes" /> 
     </div> 
    </xsl:for-each> 
    </body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

Respuesta

8

se pone la declaración de espacio en el XSLT, así:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    exclude-result-prefixes="atom" 
> 
    <xsl:template match="/"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE"> 
     <xsl:apply-tepmplates select="atom:feed/atom:entry" /> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="atom:entry"> 
    <div style="background-color:teal;color:white;padding:4px"> 
     <span style="font-weight:bold"> 
     <xsl:value-of select="atom:title"/> 
     </span> 
     <xsl:text> - </xsl:text> 
     <xsl:value-of select="atom:author"/> 
    </div> 
    <div style="margin-left:20px;margin-bottom:1em;font-size:10pt"> 
     <b><xsl:value-of select="atom:published" /> </b> 
     <xsl:value-of select="atom:summary" disable-output-escaping="yes" /> 
    </div> 
    </xsl:template> 
</xsl:stylesheet> 

Tenga en cuenta que el espacio de nombres ATOM se ha registrado en el prefijo atom: y utilizada en todos XPath largo de la hoja de estilo. He usado exclude-result-prefixes para asegurarme de que atom: no aparezca en el documento resultante.

También tenga en cuenta que reemplacé su <xsl:for-each> con una plantilla. Debería intentar evitar for-each a favor de las plantillas, también.

El uso de disable-output-escaping="yes" es algo peligroso en relación con XHTML, a menos que esté absolutamente seguro de que el contenido de summary también está bien formado XHTML.

+0

Estoy seguro de que el XHTML es seguro, es de una fuente interna. Gracias por la ayuda. –

Cuestiones relacionadas