2010-10-11 50 views
0

我正在尝试读取RSS字段并向Ruby中的每个项添加一些元数据,输出另一个有效的RSS提要。Ruby:一次修改一个XML文件

我想一次性完成此操作,但出于性能原因未将整个RSS源读入内存,但我一直在玩libxml-ruby,并且Reader对象似乎无法打印出来它刚刚读取的当前元素,这使得很难遍历XML文件并打印出每个元素。

例如:

<rdf:RDF> 
    <item> 
    <description>foo</description> 
    </item> 
</rdf:RDF> 

应该成为

<rdf:RDF> 
    <item> 
    <metadata>(some metadata about this item)</metadata> 
    <description>foo</description> 
    </item> 
</rdf:RDF> 

我不依赖与libxml-红宝石,但引入nokogiri也是建立在libxml的,似乎有相同的限制,似乎REXML根据我见过的每一篇文章都太慢了。

任何帮助将不胜感激!

否则,我想是正规表达式的时间...

回答

0

只是一个开始。

f=0 
File.readlines("file").each do |line| 
    f=0 if line[/<\/rdf/] 
    f=1 if line[/<rdf:RDF/] 
    if f==1 and line["description"] 
    line="<meta ...>\n" + line 
    end 
    puts line 
end 
+0

我确实决定做这样的事情,用循环和正则表达式。看起来像这总是会比将它加载到xml解析器中更快! – 2010-10-15 21:29:26