Разбор Ruby для файлов CSS - PullRequest
0 голосов
/ 12 июля 2010

Я работаю с некоторым 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 из-за того, что они заключены в комментарии.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Нокогири может доставить вас туда, куда вы хотите. Проблема заключается в том, что содержимое узла comment является текстом, поэтому вам необходимо повторно проанализировать этот текст, чтобы продолжить использовать джуджу Нокогири.

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 голосов
/ 12 июля 2010

Документация Nokogiri подразумевает, что он создает узлы в документе для представления комментариев (http://nokogiri.org/Nokogiri/XML/Comment.html),, если вы можете получить содержимое этих узлов, вы можете использовать простой RegExp для извлечения URL.

Что-то вроде:

/<link[^>]*?href="([^"]+)"/
0 голосов
/ 12 июля 2010

Уверен, что

/href="(.+).css"/i 

будет работать нормально

...