Nokogiri получает элемент, если тип указан в скобках

#ruby-on-rails #nokogiri

#ruby-on-rails #nokogiri

Вопрос:

У меня есть такой контент:

 
<img class="size-full wp-image-3182" title="blah" src="http://www.test.com/blah.jpg" alt="" width="800" height="533" />
blah blah
<div>other code here</div>

Я хочу получить caption из него все элементы, поэтому я пытаюсь сделать что-то вроде этого:

doc.css("") и doc.xpath('.//[caption]')

но не имел успеха.

Комментарии:

1. XML и HTML не используются [] для элементов, они используют <> . Если ваш файл выглядит именно так, вам нужно будет использовать что-то другое, кроме синтаксического анализатора XML, для извлечения нужных данных.

2. это сообщение в блоге, экспортированное из WordPress, поэтому в данном случае заголовок — это элемент WordPress, остальное — стандартный html-код

3.В приведенном вами примере нет caption элементов (в смысле XML или HTML), есть только текст, который говорит caption внутри некоторых квадратных скобок. Вам нужно будет найти какой-то другой способ его анализа и извлечения необходимых вам данных.

4. получил его, преобразовал его с помощью gsub в тег <caption>

5. Для вашего будущего «я»: './/[caption]' не очень хороший селектор для использования. // означает начало в верхней части DOM, с которым конфликтует . . Либо ./ или // было бы более разумным.

Ответ №1:

Попробуйте doc.css("[caption]").attr("caption")

Комментарии:

1. doc.css(«[caption]«) — это пустой массив, а заголовок не является атрибутом, это что-то вроде тега

Ответ №2:

Я преобразовал [caption] в <caption> тег. В моем случае это было:

 text.gsub!("[caption", "<caption").gsub!('"]', '">').gsub!("", "</caption>")
  

после этого я смог получить <caption. тег с помощью Nokogiri.