【问题标题】:Ruby: modify an XML file in one passRuby:一次性修改 XML 文件
【发布时间】:2010-10-11 22:41:54
【问题描述】:

我正在尝试读取一个 RSS 字段并向 Ruby 中的每个项目添加一些元数据,从而输出另一个有效的 RSS 提要。

出于性能原因,我想一次性完成此操作,而不会将整个 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-ruby,但是 Nokogiri 也是基于 libxml 构建的,并且似乎有相同的限制,根据我看过的每篇文章,REXML 似乎太慢了。

任何帮助将不胜感激!

否则,我想是时候使用正则表达式了……

【问题讨论】:

    标签: ruby xml


    【解决方案1】:

    只是一个开始。

    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
    

    【讨论】:

    • 我确实决定使用循环和正则表达式来做类似的事情。似乎这总是比将其加载到 xml 解析器中更快!
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2012-01-17
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多