2012-08-14 58 views
0

例如,在字符串變量HG我有HTML內容:如何重置對象「數據」?

Set oHtmlFile = CreateObject("HtmlFile") 
oHtmlFile.write H 

<do some parsing on oHtmlFile object> 

oHtmlFile.write G 
... 

如果我現在上面包含oHTMLFileHG內容。

如何寫G數據之前,我可以重置oHtmlFile對象,不無關於你的現實世界中的問題的詳細信息創建新的對象(CreateObject("HtmlFile")

回答

1

,就很難拿出好的/實用的建議。從理論上講,你可以通過使用像.inner/outerHTLM和.innerTEXT這樣的屬性或調用像.create *,.remove *或.append *等函數來操作oHtmlFile的文檔樹。

在代碼:

Dim oDOM : Set oDOM = CreateObject("HTMLFILE") 
    Dim sHTML : sHTML = "<html><head></head><body></body></html>" 
    WScript.Echo "Empty", TypeName(oDOM), "oDOM" 
    dumpDoc oDOM 

    oDOM.write sHTML 
    WScript.Echo "After .write", qq(sHTML) 
    dumpDoc oDOM 

    sHTML = "<p>G</p><p>H</p>" 
    oDOM.childNodes(0).childNodes(1).innerHTML = sHTML 
    WScript.Echo "After setting body's .innerHTML to", qq(sHTML) 
    dumpDoc oDOM 

    sHTML = "pipapo" 
    oDOM.childNodes(0).childNodes(1).childNodes(1).innerTEXT = sHTML 
    WScript.Echo "After changing second P's .innerTEXT to", qq(sHTML) 
    dumpDoc oDOM 

    oDOM.childNodes(0).childNodes(1).removeChild oDOM.childNodes(0).childNodes(1).childNodes(0) 
    WScript.Echo "After deleting first P" 
    dumpDoc oDOM 

    Dim oNode : Set oNode = oDOM.createElement("h1") 
    oNode.appendChild oDOM.createTextNode("tritratrulala") 
    oDOM.childNodes(0).childNodes(1).appendChild oNode 
    WScript.Echo "After using DOM to append an H1" 
    dumpDoc oDOM 

    sHTML = "<span>abracadabra</span>" 
    oDOM.childNodes(0).childNodes(1).childNodes(0).outerHTML = sHTML 
    WScript.Echo "After overwriting first P's outerHTML", qq(sHTML) 
    dumpDoc oDOM 

Sub dumpDoc(oDOM) 
    If oDOM.documentElement Is Nothing Then 
    WScript.Echo "", "oDOM.documentElement Is Nothing" 
    WScript.Echo "", "oDOM.childNodes.length", oDOM.childNodes.length 
    Else 
    WScript.Echo "", "oDOM.documentElement:", oDOM.documentElement.tagName 
    WScript.Echo "", "oDOM.childNodes.length", oDOM.childNodes.length 
    dumpTree oDOM.documentElement, 2 
    End If 
    WScript.Echo "-----------------" 
End Sub 

Sub dumpTree(oNode, nL) 
    Select Case oNode.nodeType 
    Case 1 
     WScript.Echo Space(nL), oNode.nodeType, oNode.tagName, qq(Replace(oNode.innerHTML, vbCrLf, "")) 
     Dim oChild 
     For Each oChild In oNode.childNodes 
      dumpTree oChild, nL + 1 
     Next 
    Case 3 
     WScript.Echo Space(nL), oNode.nodeType, oNode.nodeName, qq(Replace(oNode.nodeValue, vbCrLf, "")) 
    End Select 
End Sub 

輸出:

demoHtmlFile - demo HtmlFile 
=============================================================================== 
Empty HTMLDocument oDOM 
oDOM.documentElement Is Nothing 
oDOM.childNodes.length 0 
----------------- 
After .write "<html><head></head><body></body></html>" 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "" 
----------------- 
After setting body's .innerHTML to "<p>G</p><p>H</p>" 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY><P>G</P><P>H</P></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "<P>G</P><P>H</P>" 
    1 P "G" 
     3 #text "G" 
    1 P "H" 
     3 #text "H" 
----------------- 
After changing second P's .innerTEXT to "pipapo" 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY><P>G</P><P>pipapo</P></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "<P>G</P><P>pipapo</P>" 
    1 P "G" 
     3 #text "G" 
    1 P "pipapo" 
     3 #text "pipapo" 
----------------- 
After deleting first P 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY><P>pipapo</P></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "<P>pipapo</P>" 
    1 P "pipapo" 
     3 #text "pipapo" 
----------------- 
After using DOM to append an H1 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY><P>pipapo</P><H1>tritratrulala</H1></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "<P>pipapo</P><H1>tritratrulala</H1>" 
    1 P "pipapo" 
     3 #text "pipapo" 
    1 H1 "tritratrulala" 
     3 #text "tritratrulala" 
----------------- 
After overwriting first P's outerHTML "<span>abracadabra</span>" 
oDOM.documentElement: HTML 
oDOM.childNodes.length 1 
    1 HTML "<HEAD></HEAD><BODY><SPAN>abracadabra</SPAN><H1>tritratrulala</H1></BODY>" 
    1 HEAD "" 
    1 TITLE "" 
    1 BODY "<SPAN>abracadabra</SPAN><H1>tritratrulala</H1>" 
    1 SPAN "abracadabra" 
     3 #text "abracadabra" 
    1 H1 "tritratrulala" 
     3 #text "tritratrulala" 
----------------- 

(QQ(),節點類型的常數,和一個策略,以避免那些

oDOM.childNodes(0).childNodes(1).removeChild oDOM.childNodes(0).childNodes(1).childNodes(0) 

nastities被保留爲運動)

+0

好的,謝謝你的冗長答案WER。我認爲有可能是重置對象數據的一般方法。刪除根節點是很好的方法。乾杯 – theta 2012-08-14 13:49:25

+0

@ Ekkehard.Horner 對不起,強調你,但似乎vbscript是一種死語言,沒有人回答: 我有一個VBScript問題在這裏:[鏈接](http://stackoverflow.com/questions/37086814/classic-asp -htmlfile-object-remove-child) 如果你可以如此友善地閱讀它,並建議解決方案對我來說是一個很大的幫助。謝謝。喬 – Joe 2016-05-10 02:32:11