正在从Nokogiri::XML::Node::SaveOptions常量中删除类名



有没有办法像处理模块一样,包含Nokogiri::XML::Node::SaveOptions中的常量

我目前正在使用

save_options = Nokogiri::XML::Node::SaveOptions::FORMAT | Nokogiri::XML::Node::SaveOptions::AS_HTML
puts html.serialize(:save_with => save_options)

并且更愿意拥有

html.serialize(:save_with => FORMAT | AS_HTML)

我可以通过使用来改进一下

include Nokogiri::XML
html.serialize(:save_with => Node::SaveOptions::FORMAT | Node::SaveOptions::AS_HTML)

html.serialize(:save_with => Nokogiri::XML::Node::SaveOptions.new.format.as_html)

但这两者都不理想。有人有更好的方法吗?我看不出为什么这不能成为一个模块而不是一个类,因为创建对象的优势微乎其微。

最安全的方法是"手动"获取所需的常量。如果你在你的作用域中写下这一点,常数将被定义为正确的值:

class YourClass # or module YourModule
  %w(FORMAT AS_HTML).each do |konst|
      const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

如果常量的数量很大,您可以稍微自动化创建。问题是,这是一种要么全有要么全无的方法,像类名这样的东西也是常量,所以它们也会被导入。对于您正在查找的常量来说,这似乎不是问题。

class YourClass
  Nokogiri::XML::Node::SaveOptions.constants.each do |konst|
    const_set(konst, Nokogiri::XML::Node::SaveOptions.const_get(konst))
  end
end

希望能有所帮助。

如果您正在使用html.serialize(:save_with => FORMAT | AS_HTML)并希望简化它,为什么不使用:

html.to_html

它输出这些标志:

DEFAULT_HTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML

这是Nokogiri的标准HTML输出默认值。

如果你想要所有的电源,你可以深入使用write_to

to_htmlwrite_to都记录在Nokogiri::XML::Node中。你可能也想打听一下消息来源。

相关内容

  • 没有找到相关文章

最新更新