ローカルHTMLのdom操作と保存


デフィー  2011-04-20 11:09:27  No: 102862

お世話になります。

ローカルマシンにあるHTML(php)ファイルのdom操作を行い
新しいファイルに保存することを考えています。

こちらの掲示板を参考に
---開始---
Dim Doc As MSHTML.HTMLDocument
Set Doc = New HTMLDocument
Dim ipFile As IPersistFile

Set ipFile = Doc
ipFile.Load "c:\old.php", STGM_READ

Doc.getElementById("TEST").innerText = "OK"
'getElementById("TEST")にはもともと"==="が入っていて
'デバッグウィンドウで  
'? Doc.getElementById("TEST").innerText 
'とすると OKと表示しています

ipFIleW.Save "c:\new.php", 0
---終了---
としています。

このときに、new.phpファイルには、old.phpと全く同じ状態の内容が
できあがっています。

dim ipFileを ipFileWriteとIpFileRead  と読み書き別に設定してみたり
ipPersistStreamInitを使ってみたりしましたが、やはり同じ結果でした。

docの変更時にシグナルを送るとかするのでしょうか
ヒントでもかまいませんのでよろしくおねがいします


魔界の仮面弁士  2011-04-22 06:17:40  No: 102863

DOM を操作しても、ブラウザを右クリックしたときの「ソースの表示」の
中身は変わりませんので、そういう動作なのだと思います。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200606/06060001.txt

対処方法があるのかどうかは分かりませんが、DOM による編集結果を
保存する方法として、とりあえず思いつくところでは:

(案1) DOM の .documentElement.outerHTML を保存するようにする。

(案2) DHTMLEdit コントロールの LoadURL(LoadDocument) メソッドと、
  DOM プロパティおよび SaveDocument メソッドを使うようにする。


デフィー  2011-04-25 22:38:53  No: 102864

お返事ありがとうございます。
過去ログにあったのですね。
検索してみたのですが見つかりませんでした。

outerhtmlを使って文字列変数strHTMLに保存しました。
ところが該当するHTMLには先頭に<!DOCTYPE宣言があり、
この行が反映されないようです。
<!DOCTYPEが無いと、cssデザインが変わってしまうため必須です。
とりあえず、strHTML = "<!DOCTYPE " & strHTML にて回避しましたが
<!DOCTYPEは意味のある行なのでDOMのどこかにないのかなと疑問です。

1行だけなら上記方法で回避できますが、その他にも
DOMに入らないで重要な行って何かありますか


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加