【问题标题】:How to modify & extend Nokogiri如何修改和扩展 Nokogiri
【发布时间】:2012-12-12 21:07:05
【问题描述】:

我知道要使用 Nokogiri,需要运行:

gem install nokogiri

并且在使用 nokogiri 的 ruby​​ 文件中有require 'nokogiri'。 但是,我正在尝试自定义 Nokogiri,因此我需要能够调用 Nokogiri 项目。我做了什么:

  1. 从以下位置下载 Nokogiri 项目 https://github.com/sparklemotion/nokogiri
  2. 进行一些更改。

所以我想要的是能够调用和运行这个修改后的 Nokogiri,而不是我通过 gem install Nokogiri 安装的 Nokogiri。有人知道吗 ?

谢谢

【问题讨论】:

  • 澄清一下,Nokogiri 已经可以使用 Nokogiri::HTML(...) 解析 HTML
  • 好的,那么您可能需要编辑您的问题标题。
  • 抱歉标题混乱
  • 为什么要自定义 Nokogiri?

标签: html ruby-on-rails ruby parsing nokogiri


【解决方案1】:

当您进行修改时,您可能希望在更改代码和查看结果之间的步骤最少。在这种情况下,您可能希望直接加载您正在处理的代码。

如果您使用的是捆绑器,您可以添加:

gem 'nokogiri', :path => "/some/path/to/my/copy/of/nokogiri"

如果你只是简单地编写代码,你可以这样做:

$:.unshift("/some/path/to/my/copy/of/nokogiri/lib")
require 'nokogiri'

一旦您对修改感到满意,您可能想要创建包含它们的自己的 gem。这样,您就不必依赖 nokogiri gem 代码位于特定位置等。为此,您需要create a gemspec。请注意,您应该更改 gem 名称(困难)或版本(简单),以将您的 gem 与您正在使用的现有 nokogiri gem 区分开来。

然后:

rake gem
rake install_gem

并在您的主项目中正常使用 gem,即 gem 'nokogiri'require 'nokogiri'

【讨论】:

  • 谢谢。如果我使用 require 'nokogiri',我只需要取消移动 'lib' 文件夹吗?
  • 是的,/lib 是有意的;当您使用 bundler 时,它会为您完成该部分,但如果您自己需要 gem,则需要将加载路径指向 lib 文件夹,而不是顶级文件夹。
  • 你是怎么弄出来的?我没有在任何文档中看到?
  • 好吧,我从事 ruby​​ 开发已经有 5 年了;我不记得我具体是在哪里捡到这个的。这一切都伴随着时间:)。
  • 没有看到您的代码,我无法确定问题所在;但只要 (1) 你的 nokogiri 版本的路径是正确的,包括 /lib,(2) 你只需要 nokogiri 在你取消加载路径之后,(3) 在 /lib/ 中有一个 nokogiri.rb 文件(通常有),那么它肯定会引入你的 nokogiri 版本。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多