Nokogiri - сохранить тип документа и метатеги - PullRequest
0 голосов
/ 02 августа 2011

Я использую nokogiri, чтобы открыть существующий HTML-файл, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
   <title>Foo</title> 
</head> 
<body>
<!-- stuff -->
</body>
</html>

Затем я изменяю содержимое тега body следующим образом:

html_file = Nokogiri::HTML("path/to/html/file")
html_file.css('body').first.inner_html = "new body content"

Затем я записываю этот новый документ в файл, подобный этому:

File.open("path/to/new/html/file", 'w') {|f| f.write html_file}

И это мой итоговый html-файл:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body>
new body content
</body></html>

Мой вопрос к вам, ребята, можно ли попросить Nokogiri сохранить теги doctype и meta исходного html-файла, поскольку кажется, что они теряются / изменяются, когда я открываю документ с помощью Nokogiri и пытаюсь написать это в файл.

Любая помощь будет высоко ценится. Спасибо!

1 Ответ

1 голос
/ 02 августа 2011

Наконец понял:

Я только что изменил строку:

html_file = Nokogiri::HTML("path/to/html/file")

на

html_file = Nokogiri::HTML(File.open("path/to/html/file").read)

и теперь он работает так, как я и ожидал,Это кажется противоречивым, но я уверен, что для этого есть все основания.

Спасибо за все предложения @ezkl!

...