有没有办法像处理模块一样,包含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_html
和write_to
都记录在Nokogiri::XML::Node中。你可能也想打听一下消息来源。