我正在为我的网站使用一些HTML,基本上将我的网站从PHP移动到Rails。
我有数千页,网站的某些部分有不同的CSS文件。
我可以很好地抓取<link>
标签,但是如果它是IE6 / IE7 / IE8等,我为不同的样式表添加了一些条件。
我想弄清楚如何解析这个:
<!--[if lt IE 7]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie6.css" />
<![endif]-->
<!--[if IE 7]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie7.css" />
<![endif]-->
<!--[if IE 8]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie8.css" />
<![endif]-->
最后:
/templates/default/css/ie6.css<br />
/templates/default/css/ie7.css<br />
/templates/default/css/ie8.css<br />
我正在使用Nokogiri提取我需要的任何其他信息,但由于它们被包含在评论中,因此无法获取这些URL。
答案 0 :(得分:2)
Nokogiri文档暗示它在文档中创建节点以表示注释(http://nokogiri.org/Nokogiri/XML/Comment.html),如果您可以获取这些节点的内容,那么您可以使用简单的RegExp来提取URL。
类似的东西:
/<link[^>]*?href="([^"]+)"/
答案 1 :(得分:2)
Nokogiri可以帮到你想要的地方。问题是comment
节点的内容是文本,因此您必须重新分析该文本以继续使用Nokogiri的juju。
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<!--[if lt IE 7]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie6.css" />
<![endif]-->
<!--[if IE 7]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie7.css" />
<![endif]-->
<!--[if IE 8]>
<link type="text/css" rel="stylesheet" media="all" href="/templates/default/css/ie8.css" />
<![endif]-->
EOT
puts doc.search('//comment()').map{ |c|
Nokogiri::HTML::DocumentFragment.parse( c.content ).at('link')['href']
}
哪个输出:
/templates/default/css/ie6.css
/templates/default/css/ie7.css
/templates/default/css/ie8.css
答案 2 :(得分:0)
非常确定
/href="(.+).css"/i
可以正常工作