Nokogiri在不损坏html标签内容的情况下为其添加属性



我是ruby的新手,需要解析html内容并根据需要进行更新(为'body'标记添加一个属性)。我已经写了以下代码

def index
    url = "/home/employee/index.html"
    doc = Nokogiri::HTML::Document.parse(url)
    doc.at_css("body").set_attribute("ng-init", "menu.inspired = 'true'")
    File.open('/home/employee/index.txt','w') {|f| doc.write_html_to f}
    @content=doc.to_html
end

写入文件的输出是以下

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body ng-init="menu.inspired = 'true'"><p>/home/employee/index.html</p></body></html>

输出文件包含添加的属性,但html文件的内容似乎被覆盖了。所以我需要弄清楚我犯的错误在哪里。

您实际上并没有从文件/home/employee/index.html中操作文档,而是Nokogiri::HTML::Document.parse(url)创建了一个主体为"/home/employee/index.html"的骨架HTML文档。

您需要先从文件中读取文档。

def index
    # note that this is a file path! Not an URL.
    path = "/home/employee/index.html"
    doc = File.open(path) { |f| Nokogiri::HTML(f) }
    doc.at_css("body").set_attribute("ng-init", "menu.inspired = 'true'")
    File.open(path,'w') {|f| doc.write_html_to f}
    @content=doc.to_html
end

参见:

  • Nokogiri文档:解析HTML/XML文档

相关内容

  • 没有找到相关文章

最新更新