2010-11-20 10 views
1

Nokogiri'de özel bir CSS sözde sınıfı tanımlamaya çalışıyordum ve beklenmedik karakterlerle bazı sorunlara rastlıyordum.Nokogiri'deki özel bir css sözde sınıf argümanındaki tırnaklardan nasıl kurtulabilirim?

Örneğini Node belgelerinde aldım ve gereksinimlerim için değiştirmeye çalıştım. Böyle node.Text değere sahip bir regex eşleştirmek istedik:

node.css('script:regex("[\"\']([^/s]+)[\"\']")', Class.new { 
    def regex node_set, regex 
    node_set.find_all { |node| node.text =~ /#{regex}/ } 
    end 
}.new) 

sorun Düğüm # css yalnızca bir dize argümanı kabul olmasıdır. #regex temel olarak bir yöntem çağrısıdır ve argümanı da bir dizedir. Bu kodu çalıştırdığınızda, şöyle bir şey olsun: denedim

Nokogiri::CSS::SyntaxError (unexpected '\"' after ''(?i-mx:[\'') 

tek/çift tırnak kaçan, ama hala bu veya beklenmedik olsun '['. Tek/çift tırnakları özel css yöntem argümanına nasıl aktarabilirim?

Bu sırada yaptığım şey sadece "komut dosyası" ile eşleşmesi ve ardından düğümlü bir eşleştirici ile düğüm üzerinde dönmekti. Özel bir sözde css sınıfı kullanmak, daha kolay yeniden kullanılacağı için daha kullanışlı olacaktır.

cevap

2

Nokogiri searching for div using xpath'a göre buradan oraya gidemiyoruz.

Genelde geri aldığınız şeyi yapıyorum. Sonuçları bir .select veya .reject üzerinden geçireceğim ve ne istediğimi filtreleyeceğim. Seçim motoruna geçmek daha havalı olacağı zaman bunu yapmanın en güzel yolu değil, ama bunu başarmak sıklıkla zarafeti yener.