Как добавить тег 'href' к некоторому тексту с помощью Nokogiri, если я хочу вывод HTML? - PullRequest
2 голосов
/ 06 ноября 2011

Я пробовал много вариантов этого:

builder = Nokogiri::HTML::Builder.new do |doc|
    doc.html {
        doc.body {
            links.each do |i|
                doc.p {
                    doc.text "#{i.text}"
                } 
                    doc.a["href"] = i[:href]
            end
            }           
        }
end

Где links - это массив, в котором есть значения, необходимые для test и :href.

Что это дает (сокращенно для краткости):

This is the HTML generated
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>10 &#8729; Progamer Lim Yohwan, the E-Sports Icon</p>
<a href="http://boxerbiography.blogspot.com/2006/12/10-progamer-lim-yohwan-e-sports-icon.html"></a>

Где то, что я хочу, чтобы это было сделано:

<p><a href="http://boxerbiography.blogspot.com/2006/12/10-progamer-lim-yohwan-e-sports-icon.html">10 &#8729; Progamer Lim Yohwan, the E-Sports Icon</a></p>

Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2011

мю правильно, но разве не так лучше?

builder = Nokogiri::HTML::Builder.new do |doc|
    doc.html do |html|
        html.body do |body|
            links.each do |i|
                body.p do |p|
                    p.a i.text, :href => i[:href]
                end 
            end
        end
    end
end
2 голосов
/ 06 ноября 2011

С помощью интерфейса Builder атрибуты предоставляются в качестве аргументов для вызова doc.tagname, и содержимое передается внутри блока. Так что-то вроде этого должно сделать свое дело:

builder = Nokogiri::HTML::Builder.new do |doc|
    doc.html { 
        doc.body { 
            links.each do |i| 
                doc.p {
                    doc.a(:href => i[:href]) {
                        doc.text i.text # or maybe i[:text]
                    }
                }
            end  
        }    
    }
end
...