2011-08-01 4 views
0

を保つ:そして、私はこのようなbodyタグの内容を変更鋸山 - 私はこのようになり、既存のHTMLファイルを開くには、鋸山を使用していDOCTYPEやメタタグ

<?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> 

を:

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> 

それは彼らが私は鋸山で文書を開き、書き込みをしようとしたときに変更/失われているように見えることから、元のHTMLファイルのdoctypemetaタグを維持するために鋸山を伝えることが可能です場合は君たちのために私の質問それをファイルに保存します。

ご協力いただければ幸いです。ありがとう!

+0

どのようなバージョンのNokogiriをお使いですか? –

+0

は1.5.0 – mportiz08

+0

のように見える面白い。そのHTMLを同様の方法で処理すると、 'DOCTYPE'宣言と' xml'宣言の位置が反転しますが、他はすべてそのまま維持されます。 [this gist](https://gist.github.com/f357da62d5fde62fdd7d)を参照してください。 –

答えて

1

は、最後にそれを考え出し:

を私はちょうどライン変更:

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

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

を、私はそれが期待してるようになりました、それが動作します。矛盾しているようですが、それには正当な理由があると確信しています。

@ezklのご提案ありがとうございます!

関連する問題