如何使用Ruby删除重复的XML节点?

时间:2009-10-12 18:30:33

标签: xml ruby

假设我有这种结构:

<one>
   <two>
     <three>3</three>
   </two>

   <two>
     <three>4</three>
   </two>

   <two>
     <three>3</three>
   </two>
</one>

无论如何都要达到这个目的:

<one>
  <two>
    <three>3</three>
  </two>

  <two>
    <three>4</three>
  </two>

</one>

使用Ruby的库?我设法使用Nokogiri获得this。从我的测试来看,它似乎有效,但也许还有另一种方法,一种更好的方法。

2 个答案:

答案 0 :(得分:5)

如何用两行完成整个事情?

seen = Hash.new(0)
node.traverse {|n| n.unlink if (seen[n.to_xml] += 1) > 1}

如果同一节点出现在两个不同的父节点下,并且希望将这些节点视为重复节点,则可以将第二行更改为:

node.traverse {|n| n.unlink if (seen[(n.parent.path rescue "") + n.to_xml] += 1) > 1}

答案 1 :(得分:0)

此页面稍微解释了Ruby中的XML解析http://developer.yahoo.com/ruby/ruby-xml.html

此页面解释了为什么要对正则表达式之类的东西使用正确的解析器的一些原因: http://htmlparsing.icenine.ca

乍一看,你正在使用的方法似乎并不可怕。