摘要:本文主要討論的是如何利用Visual Basic來分析FrontPage2000文檔,文章首先研究了Frontpage2000的對象模型,提出了利用Frontpage文檔內部的HTML代碼和利用Frontpage的對象模型中對象兩種方法分別對FrontPage2000文檔進行分析,然后提出了兩種方法的優缺點,最后提出了用兩種方法的結合來分析FrontPage2000文檔新觀點。
關鍵詞:VB;Frontpage的對象模型;HTML標記
中圖分類號:TP3文獻標識碼:A文章編號:1009-3044(2008)17-21553-03
1 研究背景和意義
當今國內的各大高校在學生的大一階段開設了《大學計算機基礎》課程,有些省份還專門為這些計算機基本應用技術設立了等級考試。故研究本課題的主要意義在于以下幾個方面: 第一,可深入了解Frontpage應用軟件。第二,熟悉Frontpage內部結構后,可開發出Frontpage操作考評系統,為計算機應用等級考試服務。
2 Frontpage的對象模型分析
Frontpage2000提供了3種對象模型,可以用來處理HTML元素和Frontpage網頁文檔。
(1)Application對象模型。Application對象模型是Frontpage對象模型中的最高級對象,它提供對活動網頁和文件的訪問。該對象模型包括完成操作系統或應用軟件范圍的方法、屬性和事件的對象。Application對象模型還提供了對所有Frontpage中對象模型的訪問,包括Office共享對象,以及指向Web對象模型和Page對象的項目[1]。
(2)WEB對象模型。WEB對象模型提供了瀏覽Frontpage中打開的所有站點的能力,并可以處理站點內網絡子文件夾[1]。用Web對象模型可程序化處理網頁。例如,能添加或刪除文件夾和文件、打開文件到編輯器、應用主題,或者處理有關Web站點的數據。我們可以用Web對象來創建Web站點,管理Web站點導航及管理Web站點中的文件夾和文件。
(3)PAGE對象模型。Frontpage的PAGE對象與Internet Explorer 4.0及以后的文檔對象模型兼容[1]。通過PAGE對象模型能對網頁上HTML元素進行操作,例如,允許在一個活動網頁中瀏覽文檔,以及為某個網頁添加鏈接等。
3 用VB來分析FrontPage2000文檔
3.1 在VB工程中設置引用對象庫及對象庫文件分析
首先要在VB工程里引用Frontpage的對象庫Microsoft Frontpage 4.0 Web Object Reference Library和Microsoft Frontpage 4.0 Page Object Reference Library,這兩個對象庫提供了應用程序中對象和集合的總體映象。對象庫描述了應用程序提供的對象的類型,以及應用程序的對象可用的屬性和方法。對象庫文件可以是一個單獨的文件(*.tlb文件),也可以是包含在其它文件中(*.olb、.exe或.dll文件)。引用Microsoft Frontpage 4.0 Page Object Reference Library對象庫就是后一種,即實際上引用的fpeditax.dll文件中的信息,而引用Microsoft Frontpage 4.0 Web Object Reference Library,即引用的frontpage.exe文件中的信息。
3.2 在VB工程中定義相關對象變量
引用完對象庫后,下面就要定義相關對象的變量。可作如下的定義:
Public fpweb As Web, fppage As FrontPage.PageWindow
上面的語句中首先定義了一個fpweb的web對象變量,然后又定義一個fppage的pagewindow對象變量。對FrontPage文檔分析有點特別,因為一個FrontPage的頁面是包含在一個站點之中的,故首先要打開站點,接著才能對站點中的網頁進行分析。另外還要說明的是,如果前面沒有引用FrontPage的對象庫,則以上的定義是非法的。
3.3 在VB工程中打開FrontPage文檔
下面我們還有個問題要解決,即如何用上面定義的兩個變量來定位到實際要分析的文檔。在這里可用GETOBJECT來獲取活動的FrontPage文檔。部分參考代碼如下:
dim P as String
Webs.Add (file_source)
Set fpweb = Webs.Open(file_source)
fpweb.Activate
P = App.Path
Set fppage = GetObject(P + \"\\fp.htm\")
上面的程序中首先定義一個字符串變量,然后用Webs.Add來新建一個站點,并賦值給fpweb的web對象變量并激活該站點,接下來用App.Path的方法返回當前網頁文件的路徑,并把它賦給P變量。末句是最為重要的一句,是把獲取到一個FrontPage文檔“fp.htm”文件對象賦給fppage對象變量。
3.4 獲取FrontPage的文檔信息
FrontPage網頁文檔內部實際上是一些HTML的標記,例如表格的標記是
(1)直接把HTML的標記讀取出來再分析
首先可通過InnerHTML或OutHTML屬性把對象的HTML代碼讀出再作下一步的分析。這種方式在分析Fronpage文檔的很多地方都可用到,如判斷表格的某個單元格是否插入了圖片、文檔里是否有表單、判斷文檔中文字的值、字體、字體顏色、字號等。例如,要對Fronpage文檔中表格中的第三行的第三個單元格判斷有沒有插入fp_files文件夾里的motif.jpg圖片,可做如下的編程:
If InStr(table1.Rows(2).Cells(2).innerHTML, \" 0 Then
If InStr(table1.Rows(2).Cells(2).innerHTML, \"src=fp_files/motif.jpg\") <> 0 Then
score = score + 1
Else
wrong_inf = wrong_inf + \"圖片的路徑不對!\"
End If
Else
wrong_inf = wrong_inf + \"表格中的第三行的第三個單元格沒有插入圖片!\"
end if
上面的程序中首先把Table標記中的HTML標記全部讀出來轉變為字符串,接著通過Instr函數判斷這相字串中是否含有指定的字串,達到了分析判斷的功能。如果我們采用對象模型來編程則顯得比較麻煩。
使用第一種方法進行分析時,很多地方要解決HTML代碼中雙引號的問題,因為VB中不能處理雙引號,而FrontPage網頁文檔里有很多的雙引號。在此可以將去雙引號這個功能單獨定義一個過程或函數,在進行字符串比較的時候直接調用。下面是去雙引號功能的函數參考代碼。
Public Function mytrim(tagstr)
For i = 1 To Len(tagstr)
temp = Mid(tagstr, i, 1)
If Asc(temp) <> 34 Then
newtemp = newtemp + temp
End If
Next
mytrim = newtemp
End Function
(2)使用對象模型來分析FrontPage的文檔
采用這種方法來分析FrontPage的文檔,首先要定義相關對象的變量,然后用這些對象變量來指向到相應的HTML標記。例如我們要對網頁中圖片信息做分析時,第一步利用FPHTMLImg對象來定義一個圖片變量。第二步利用圖片變量的相關屬性進行分析。請看下面的部分參考代碼:
Dim img As FPHTMLImg
Set img = fppage.Document.All.Tags(\"img\").Item(0)
MsgBox img.src
MsgBox img.alt
MsgBox img.Height
msgbox img.width
(3)采用直接讀取HTML代碼和用Frontpage對象模型兩種方法結合方式來分析FrontPage的文檔。
對于第一種方法比較的直接,簡單,但有局限性,如用戶直接對HTML標記操作時,有可能多加一些空格,或將HTML文檔內部標記換行等,雖然這樣做不影響網頁的預覽效果,但給程序員的分析會帶來很大的麻煩。另外VB程序中不能直接對單個雙引號進行操作,而HTML代碼標記卻有很多的雙引號。對于第二種方法優點是直接面向文檔中的標記對象編程,針對性強。如先利用對象模型來定義表格、表單、圖片等對象變量,然后在程序中直接對這些變量的屬性進行分析。但缺點是要定義很多的標記變量,編程麻煩。另外最大的缺點是不能做無對象屬性編程。例如文檔中沒有圖片對象時,就不能對圖片屬性編程,否則會造成對象引用錯誤。在分析FrontPage文檔過程中,要充份利用兩種方法的優點,而對于各自己的缺點,可用兩者結合的方式進行彌補。例如,在對網頁中的表單進行分析時,我們先可用第一種方法判斷網頁里是否有表單標記及相應位置上是否有表單元素,如有接下來再用第二種方法對表單的相關元素的屬性作出判斷。請看下面的部分參考代碼:
If InStr(mytrim(fppage.Document.body.innerHTML), \"
Else
MsgBox \"沒有插入表單!,退出評卷\"
Exit Sub
End If
5 結束語
在VB中采用直接讀取HTML標記的方法和使用Frontpage2000對象模型兩種方法都是可行的,不過各自都有優缺點,在編程分析過程中要有區別對待。而最有效的分析方法是把兩種方法的結合起來,這一方法在開發Frontpage2000無紙化測評系統中更為有效。筆者已用這種方法已開發出了這樣的無紙測評系統,現正在本校的計算機一級考試輔導課程中廣泛應用。
參考文獻:
[1] 北京博彥科技發展有限責任公司. 編程高手office VBA[M].北京大學出生版社,2000,(12)183-191.
[2] 徐國平.VBA中文版程序設計與應用[M].清華大學出版社,1998,(10) 240-255.
[3] 趙建民.大學計算機基礎[M].浙江科技出版社,2007,(01)151-174.
[4] microsoft office幫助系統.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文