- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
使用 rails 3.0.7 和 ruby 1.9.2。
我正在使用 Nokogiri 构建自定义 XML。我在主视图文件中调用部分构建器文件。但是部分用于 xml 的类不是 Nokogiri。谁能解释为什么 xml 类不是 Nokogiri?
<%= Nokogiri::XML::Builder.new(:encoding => 'UTF-8') { |xml|
puts "xml class in main file #{xml.class}"
xml.users {
@users.each do |user|
xml << render(:partial=>"users/user", :locals=>{:user=>user, :xml => xml})
end
}
}.to_xml.html_safe
%>
puts "xml class in builder file #{xml.class}"
xml.user {
xml.id user.id
xml.name user.name
xml.email user.email
}
在 application.rb 中,使用:
ActiveSupport::XmlMini.backend = 'Nokogiri'
输出:
xml class in main file Nokogiri::XML::Builder
xml class in builder file Builder::XmlMarkup
最佳答案
IIUC ActiveSupport::XmlMini.backend = 'Nokogiri'
仅用于使用 Nokogiri 而非 ReXML 解析 XML 参数,不适用于构建器模板生成。
您正在手动创建一个 Nokogiri::XML::Builder,然后依靠 render
生成部分,因此您的输出是一致的。
使用以下(在 config/initializers/nokogiri_builders.rb
中)通过渲染实际使用 Nokogiri
(另外你可以停止使用 .xml.erb
文件来创建您自己的 Nokogiri::XML::Builder
实例,并且也只需使用 .builder
):
# config/initializers/nokogiri_builders.rb
# Using Nokogiri::XML::Builder in lieu of stock pure ruby Builder for Rails builder templates
module Nokogiri
module XML
class Builder
# handle instruct! instead of emitting nonsense tag
def instruct!(tag, options = {})
case tag
when :xml
@version = options[:version]
@encoding = options[:encoding]
else
raise NotImplementedError(tag.inspect)
end
end
# redefined, to recover what instruct! gave us
def to_xml(*args)
if Nokogiri.jruby?
options = args.first.is_a?(Hash) ? args.shift : {}
unless options[:save_with]
options[:save_with] = Node::SaveOptions::AS_BUILDER
end
args.insert(0, options)
end
if @version || @encoding
# set options according to what was given previously
args[0][:version] = @version if @version
args[0][:encoding] = @encoding if @encoding
# do emit a declaration
args[0].delete(:save_with)
end
@doc.to_xml(*args)
end
end
end
end
module ActionView
module Template::Handlers
class Builder
# Default format used by Builder.
class_attribute :default_format
self.default_format = :xml
def call(template)
require_engine
code = <<-CODE
builder = Nokogiri::XML::Builder.new do |xml|
#{template.source}
end
# default to not emit a declaration (use instruct! instead)
save_options = Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
# default to UTF-8, as it's Rails default encoding
options = { encoding: 'UTF-8', indent: 2, save_with: save_options }
self.output_buffer = builder.to_xml(options)
CODE
code
end
protected
def require_engine
@required ||= begin
require 'nokogiri'
true
end
end
end
end
end
不过请注意,Nokogiri 在使用 to_xml
生成输出之前会构建完整的 DOM,而 Builder 会动态连接字符串。这可能是也可能不是您想要的,尤其是对于大型数据集。不过在这两种情况下,完整的最终字符串都驻留在内存中。
关于ruby-on-rails - Nokogiri 类 XML 中使用的部分文件的 XML 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663492/
我在 OSX 上使用 RVM 和之前的 RBENV。我在 ./gems 中相对于我的项目路径安装了我的 gems 我正在使用 aws-sdk 并尝试使用 s3 客户端导致 nokogiri/nokog
我正在尝试使用以下版本在 Mac OS Big Sur 上构建 Rails 应用程序...... $ rails --version Rails 5.0.7.2 $ ruby --version ru
我正在尝试抓取 http://www.ign.com/games/reviews使用 Nokogiri,我想实例化与页面上每个游戏评论相对应的新评论对象。当然,我还想从每条评论中获取每个数字分数,并将
我正在编写 Lynda 的 Ruby on Rails 教程,一切都按预期进行。所有安装和一切都运行完美。 但是创建项目后,当我尝试启动服务器(cmd:rails server)时,我收到错误消息:
尝试按如下方式在生产模式下运行 rake Assets 预编译。 rake assets:precompile 它在 ubuntu 14.04(32 位)和 16.06(32 位)上运行良好。但是在
我需要一种方法来运行 nokogiri 脚本 #parser.rb require 'nokogiri' def parseit() //... end 并在 jruby 的 main.rb 下面运行
在解析缩进的 XML 时,不重要的空白文本节点是从结束标记和开始标记之间的空白创建的。例如,来自以下 XML: Tove Jani Reminder Don't forget me
Nokogiri 在我的 gem 文件中。 bundle 安装返回预期的输出: Using nokogiri (1.4.4) Your bundle is complete! Use `bundle
我安装了 Ruby 和 Nokogiri gem。在 irb 中,我尝试: require 'nokogiri' require 'open-uri' url = 'http://www.amazon
我想使用 XSL 将 XML 文档转换为 HTML,稍微修改一下,然后将其呈现出来。这基本上就是我正在做的: source = Nokogiri::XML(File.read 'source.xml'
我的 Ruby on Rails 应用程序使用 Rails 2.2.2 和 Ruby 1.8.7。 尝试运行时 RAILS_ENV=production rake gems:install 或任何佣金
在 IRB 中,当我键入 require“nokogiri”时,出现以下错误: LoadError: cannot load such file -- nokogiri 我的 gemfile 中安装了
我正在使用 DevKit 在 Windows 8.1 上运行全新安装的 Ruby 2.2.1。安装后我运行: gem install rails rails new testapp cd testap
我正在尝试安装 nokogiri,因为它是启动 rails 所必需的 $ rails s /usr/local/rvm/gems/ruby-1.9.3-p194@global/gems/bun
我终于设法解析了网站的部分内容: get '/' do url = '' data = Nokogiri::HTML(open(url)) @rows = data.css("td[val
我第一次使用 Nokogiri 搜索 HTML 文档。当我创建一个变量(并打印)时,它等于: beteween Nokogiri::HTML(open(url).read) 它似乎输出与完全相同的东西
如果我尝试安装 nokogiri,我会收到以下错误: rvmsudo gem install nokogiri ERROR: Error installing nokogiri: nokog
我在屏幕抓取 rake 任务中有以下代码 page = agent.get("https://domainname.co.uk/unit/27/logs?type=incoming&page=8")
我尝试(出于测试目的)解析 Google 商家 XML 提要,定义为: EasyOptic 2014-08-01T16:31:
如何将“foo”替换为“bar”? 来自 foo1foo2foo4foo5foo6 至 bar1bar2bar4bar5bar6 我只想替换标签内部内容,没有标签属性。 有什么想法吗? 最佳答案 re
我是一名优秀的程序员,十分优秀!