使用LibXML-Ruby清除不需要的命名空间

时间:2009-08-27 15:26:47

标签: xml ruby xpath namespaces libxml-ruby

我想解析Atom Feed并为每个条目创建一个符合Atom标准的缓存。

问题是某些供稿(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?

1 个答案:

答案 0 :(得分: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>

如果它们是

,则逐字复制所有节点
  • 在默认(空)命名空间
  • 中 Atom命名空间中的
  • 文本节点或评论

也许你可以使用它。