我是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文档