Нокогири, как мне получить это значение - PullRequest
0 голосов
/ 06 марта 2012

У меня есть объект nokogiri:

element.first
=> #<Nokogiri::XML::Element:0x3fc0cf8ac4b8 name="a" attributes=[#<Nokogiri::XML::Attr:0x3fc0cf8ac454 name="class" value="fl">, #<Nokogiri::XML::Attr:0x3fc0cf8ac42c name="id" value="flag16">, #<Nokogiri::XML::Attr:0x3fc0cf8ac418 name="href" value="/flag/?flagCode=16&postingID=2884068312">, #<Nokogiri::XML::Attr:0x3fc0cf8ac404 name="title" value="Wrong category, wrong site, discusses another post, or otherwise misplaced">] children=[#<Nokogiri::XML::Text:0x3fc0cf8ab6bc "\n\t\t\t\tmiscategorized">]> 

Мне нужно получить номер 2884068312 из значения postingID.

Есть идеи, как этого добиться?

element.first.value
NameError: undefined local variable or method `value' for main:Object
    from (irb):138
1.9.2-p290 :139 > element.first[:value]
 => nil 
1.9.2-p290 :140 > element.first["value"]
 => nil 

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Число является частью атрибута href, поэтому попробуйте:

element.first['href']

Метод [] возвращает текстовое значение атрибута узла.

Это должно дать вам строку "/flag/?flagCode=16&postingID=2884068312". Затем вы можете использовать регулярное выражение, чтобы получить число, что-то вроде /ID=(\d+)/ должно работать.

Итак, сложив это вместе:

element.first['href'][/ID=(\d+)/, 1]
1 голос
/ 07 марта 2012

Я думаю, вам нужен элемент ['href'], который будет извлекать: '/ flag /? FlagCode = 16 & postingID = 2884068312'. Затем вы можете взять это значение и запустить его через регулярное выражение, чтобы получить ваш номер как:

postingID=(\d+)
...