2009-08-27 2 views
1

Я хотел бы проанализировать Atom-канал и создать кеш-совместимый Atom для каждой записи.Очистить нежелательные пространства имен с LibXML-Ruby

Проблема в том, что некоторые каналы (this one for example) имеют много пространств имен, кроме Atom.

Возможно ли сохранить целостность всех узлов Atom и удалить каждый узел, принадлежащий другому пространству имен?

Что-то вроде этого:

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?

ответ

2

В XSLT можно использовать это преобразование:

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

Экземпляры все узлы дословно, если они

  • в значение по умолчанию (пусто) namespace
  • в пространстве имен Atom
  • текстовые узлы или комментарии

Возможно, вы можете использовать это.

Смежные вопросы