2009-08-27 12 views
1

Je voudrais analyser un flux Atom et créer un cache compatible Atom pour chaque entrée.Effacer les espaces de noms indésirables avec LibXML-Ruby

Le problème est que certains flux (this one for example) ont plusieurs espaces de noms autres que l'Atom.

Est-il possible de conserver intacts tous les nœuds Atom et de supprimer chaque nœud appartenant à un autre espace de noms?

Quelque chose comme ceci:

valid_nodes = entry.find('atom:*', '/atom:feed/atom:entry') 
# now I need to create an xml string with valid_nodes, but how I do that?

Répondre

2

Dans XSLT, vous pouvez utiliser cette transformation:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/2005/Atom" 
> 
    <xsl:output method="xml" indent="yes" encoding="utf-8" /> 

    <xsl:template match="node() | @*"> 
    <xsl:if test=" 
     namespace-uri() = '' 
     or 
     namespace-uri() = 'http://www.w3.org/2005/Atom' 
    "> 
     <xsl:copy> 
     <xsl:apply-templates select="node() | @*" /> 
     </xsl:copy> 
    </xsl:if> 
    </xsl:template> 

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

Cette copie tous les nœuds in extenso, si elles sont

  • dans la valeur par défaut (vide) espace de noms
  • dans l'espace de noms Atom
  • nœuds de texte ou commentaires

Peut-être que vous pouvez l'utiliser.