Я видел много подобных вопросов здесь, но все еще не могу заставить работать мой конкретный вариант использования. XPath newby здесь.
У меня есть следующий фрагмент ruby code
post_html = Nokogiri::HTML(post.raw)
@restricted_file_types = SiteSetting.file_attachment_whispers_file_extensions.split('|')
Rails.logger.info "searching for restricted extensions #{@restricted_file_types.inspect}"
Rails.logger.info "post is: #{post_html}"
# trying to get links
tags = post_html.xpath("//p[contains(., '\[.*')]")
Rails.logger.info "tag from regex: #{tags}"
tags.each do |attachment|
Rails.logger.info "p tag found in parsing"
Rails.logger.info "#{attachment}"
does_contain = @restricted_file_types.any? {
|extension| attachment.include?(extension)
}
Rails.logger.info 'checking for restricted'
if contains_restricted?(attachment)
Rails.logger.info 'contains restricted'
links.push(attachment)
node = post_html.create_element 'p'# create paragraph element
node.inner_html = SiteSetting.file_attachment_whispers_message
attachment.replace '[color=red]' + node + '[/color]' # replace found link with paragraph
post.raw = post_html
post.save!
hasUpdated = true
end
end
post.raw будет содержать что-то похожее на структуру этого примера.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>this is a dog that borks. Image of dog attached.
[3408.zip|attachment](upload://szj2cSHQnbp8zsuBeC7ZsZ9mllg.zip) (19.7 KB)</p></body></html>
Моя цель - заменить ссылку на файл сообщением. Чтобы сделать это, я пытался захватить только эту часть html, чтобы все это изменить, а затем переписать. Я застрял на том, как правильно использовать xpath в этой ситуации. post_ html .xpath ("// p [содержит (., '[. *')]") не работает.
Я не до конца понимаю, что делает первый параметр в xpath, так как я получил это из другого примера. Я также не понимаю, как это возвращается ни с чем не соответствует. Может кто-нибудь объяснить, что именно это делает и почему не работает?
Спасибо:)