我正在使用 nokogiri 解析一个 html 文件并对其进行修改,然后将其输出到这样的文件中:
htext= File.open(inputOpts.html_file).read
h_doc = Nokogiri::HTML(htext)
File.open(outputfile, 'w+') do |file|
file.write(h_doc)
end
Run Code Online (Sandbox Code Playgroud)
输出文件包含第一行:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
Run Code Online (Sandbox Code Playgroud)
我不想要这个,因为我将 html 嵌入到不同的文件中,而这个标签导致了问题。
问题是如何从 h_doc 中删除它。
根据您尝试执行的操作,您可以将 HTML 解析为DocumentFragment:
h_doc = Nokogiri::HTML::DocumentFragment.parse(htext)
Run Code Online (Sandbox Code Playgroud)
当调用to_s或to_html在片段上时,文档类型行将被省略,如果 Nokogiri 添加的<html>and<body>标签尚不存在,也会被省略。
读取输入文件时,您可以忽略第一行:
htext= File.readlines(inputOpts.html_file)[1..-1].join
h_doc = Nokogiri::HTML(htext)
File.open(outputfile, 'w+') do |file|
file.write(h_doc)
end
Run Code Online (Sandbox Code Playgroud)