在Ruby中寻找CSS解析器
我正在寻找一个CSS解析器,类似于这个在Java中寻找CSS解析器 ,但在Ruby中。
输入:HTML文档的一个元素。
输出:与该特定元素关联的所有样式。
我已经用Google搜索了,我也在这里搜索了Stackoverflow,但我能找到的只是这个Java解析器。
你有几个选择,比如……
- Ruby CSS Parser 。
- TamTam监控系统
- CSSPool
我还需要一个CSS解析器,但是在接受的答案中没有列出可以解析CSS3。
我最后使用Sass进行了一些扩展:
require 'sass' class Sass::Tree::Visitors::ToArray < Sass::Tree::Visitors::Base protected def initialize @array = [] end def visit(node, parent = false) if node_name(parent) == "root" @media = "all" end method = "visit_#{node_name(node)}" if self.respond_to?(method, true) self.send(method, node) else visit_children(node) end @array end def visit_children(parent) parent.children.map {|c| visit(c, parent)} end def visit_root(node) visit_children(node) end def visit_media(node) @media = node.query.join('') visit_children(node) end def visit_rule(node) @selector = node.rule[0] visit_children(node) end def visit_prop(node) return unless node.value @array << { media: @media, selector: @selector, property: node.name[0], value: node.value.to_sass } end end class Sass::Tree::Node def to_a Sass::Tree::Visitors::ToArray.visit(self) end end
使用上面的代码,
Sass::Engine.new("body {color: #f00}, p {font-size: 20px}", :syntax => :scss).to_tree.to_a
会导致
> [{:media=>:all, :selector=>"body", :property=>"color", :value=>"#f00"}, {:media=>:all, :selector=>"p", :property=>"font-size", :value=>"20px"}]