在 Ruby 中使用 Hpricot 更新单个 XML 实体?

发布于 2024-08-14 00:45:45 字数 217 浏览 10 评论 0原文

我将使用 Hpricot 来处理 XML 文件。我想随机显示文件中的一些引言,然后我想跟踪每个引言的显示频率。 我是否可以使用 Hpricot 更新 XML 文件中的单个项目(或者是否有其他解决方案可以为我执行此操作?),或者我应该在每次显示项目时重写整个 XML 文件?

I am going to be using Hpricot to process an XML file. I want to randomly display some quotes from the file, and then I want to keep track of how often each quote has been displayed.
Is it possible for me to update a single item within the XML file using Hpricot (or is there some other solution that can do this for me?) or should I just rewrite the entire XML file each time an item is displayed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哑剧 2024-08-21 00:45:45

我曾经使用 nokogiri 而不是 hpricot (它明显更快)。

我做了这样的事情:

#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'

FNAME = "/home/kirill/books.xml"

doc = Nokogiri::XML(open(FNAME))

doc.search('title').each {|node|
  node.content=node.content.reverse
}

File.new(FNAME,'w').write doc unless doc.validate

你有这么大的文件,这会很慢吗?

或者你还想要其他我不明白的东西吗?

I used to work with nokogiri instead of hpricot (it is significantly faster).

I did something like this:

#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'

FNAME = "/home/kirill/books.xml"

doc = Nokogiri::XML(open(FNAME))

doc.search('title').each {|node|
  node.content=node.content.reverse
}

File.new(FNAME,'w').write doc unless doc.validate

Do you have so large file this will be way to slow?

Or do you want something else I haven't understood?

如果没有你 2024-08-21 00:45:45

我看到了几个解决方案:

  1. 解析文件一次并将其存储在数据库中,并使用附加属性 viewed 来跟踪。
  2. 如果DB不可用,则解析一次并保留Yaml。更容易解析、读取和写回。每次都会为您节省宝贵的执行时间。

如果您不断更新文件或与远程服务器同步文件,那么将信息存储在数据库中是最好的选择。

I see a couple of solutions:

  1. Parse the file once and store it in DB, and use additional attributes , viewed to keep a track.
  2. If DB is not available, parse it once and keep a Yaml. Easier to parse, read and write back. Will save you valuable execution time each time.

If you keep updating the file or synchronizing the file with a remote server, then storing the information in a DB is your best bet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文