2012-01-23 14 views
6

Sto creando un piccolo file XSL personalizzato per il rendering di un feed RSS. I contenuti sono di base, come segue. Funziona perfettamente, tranne quando l'XML sorgente contiene la riga 'xmlns = "http://www.w3.org/2005/Atom" "nella definizione del feed. Come indirizzo questo? Non ho familiarità con gli spazi dei nomi per sapere come spiegare questo caso.Creazione di XSL per il feed 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> 

risposta

8

Hai messo la dichiarazione dello spazio dei nomi in XSLT, in questo modo:

<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> 

Si noti che lo spazio dei nomi ATOM è registrato con il prefisso atom: e utilizzata in tutti XPath per tutto il foglio di stile. Ho usato exclude-result-prefixes per assicurarmi che atom: non compaia nel documento risultante.

Si noti inoltre che ho sostituito il <xsl:for-each> con un modello. Dovresti cercare di evitare per-ciascuno a favore dei modelli, pure.

L'uso di disable-output-escaping="yes" è un po 'pericoloso in combinazione con XHTML - a meno che non si è assolutamente positivo che il contenuto di summary è ben formato XHTML, anche.

+0

Sono sicuro che XHTML è sicuro, proviene da una fonte interna. Grazie per l'aiuto. –

Problemi correlati