如何通過VB處理XML
- 首先要引用一個Microsoft XML 隨便選個版本。
- 在初始化的時候讀取XML顯示到TXTBOX中,代碼如下:
'通過2進制流將XML文件讀出來,也可以是其它文件格式
Private Function pstrUpdateView(istrXMLPath As String) As String
Dim wlngFreeFile As Long
Dim wbytwbytLoadBytes() As Byte
'獲得一個空閑文件號
wlngFreeFile = FreeFile
Open istrXMLPath For Binary As #wlngFreeFile
ReDim wbytLoadBytes(1 To LOF(wlngFreeFile)) As Byte
Get #wlngFreeFile, , wbytLoadBytes
Close wlngFreeFile
pstrUpdateView = StrConv(wbytLoadBytes, vbUnicode)
End Function - 裝載XML。傳進去一個XML地址,如果裝載不成功就error,成功則執行下一步
Private Sub fsubLoadXML(istrXMLPath As String)
Set pobjXMLDoc = CreateObject("MSXML2.DOMDocument")
If pobjXMLDoc.Load(istrXMLPath) = False Then
On Error GoTo LoadXMLErr:
End If
On Error GoTo 0
Exit Sub
LoadXMLErr:
Dim myErr
Set myErr = pobjXMLDoc.parseError
MsgBox ("ERROR:" & myErr.reason)
Set myErr = Nothing
End Sub -
讀屬性。DOMDocument對象里有2個讀節點的方法:
-
selectNodes() 如果根節點下有多個子節點就要用這個方法,item定義了第幾個子節點
-
selectSingleNode()如果根節點下只有一個字節點可以用這個方法
- Private Function fstrReadAttr(istrNodes As String, istrAttribute As String) As String
On Error GoTo ErrHandle:
Dim wobjXmlAttr As MSXML2.IXMLDOMAttribute
'
' Set wobjXmlAttr = pobjXMLDoc.selectNodes(istrNodes).Item(0).Attributes.getNamedItem(istrAttribute)
'
Set wobjXmlAttr = pobjXMLDoc.selectSingleNode(istrNodes).Attributes.getNamedItem(istrAttribute)
fstrReadAttr = wobjXmlAttr.Text
'destroy object
Set wobjXmlAttr = Nothing
On Error GoTo 0
Exit Function
ErrHandle:
MsgBox Err.Description
Set wobjXmlAttr = Nothing
End Function
-
-
讀節點。 call fstrReadNode("/test/user") ,參數是test節點下的user子節點Private Function fstrReadNode(istrNodes As String) As String
Dim xNode As MSXML2.IXMLDOMNode
Set xNode = pobjXMLDoc.selectSingleNode(istrNodes)
fstrReadNode = xNode.Text
Set xNode = Nothing
End Function -
寫節點。參數1:節點;參數2:需要寫入的值
Private Sub fsubWriteNode(istrNodes As String, istrValue As String)
Dim wobjXMLNode As IXMLDOMElement
Set wobjXMLNode = pobjXMLDoc.documentElement.selectNodes(istrNodes).Item(0)
wobjXMLNode.Text = istrValueSet wobjXMLNode = Nothing
End Sub
a sample :download
轉自:http://blog.csdn.net/kinytx/
MSXML 處理 xml 文檔時外部DTD定義的問題(ASP)
項目中碰到這個問題,所以也貼了出來
xmlfile = "http://myserver/catalog.xml"
xslfile = "catalog.xsl"
' 創建相關對象
Set xslDoc = server.CreateObject("MSXML2.FreeThreadedDOMDocument")
Set xmlDoc = server.CreateObject("MSXML2.DOMDocument")
' 讀取xsl文件
xsldoc.async = False
xsldoc.resolveExternals = True
xsldoc.load server.MapPath(xslfile)
' 讀取xml文件
xmldoc.setProperty "ServerHTTPRequest",True ' 設置ServerHTTPRequest 屬性為 True 為了通過http協議載入xml文檔
xmldoc.async = False ' 設置 async屬性為 False 關閉異步調用
xmldoc.resolveExternals = True ' 設置 resolveExternals 為 True 打開外部DTD分析
xmldoc.validateOnParse = False ' 設置 validateOnParse 為 False 允許文檔驗證
xmldoc.load xmlfile ' 讀取xml文檔
Do While (xmldoc.ReadyState < 4) ' 檢查ReadyState狀態值是否為4 ' 具體數值定義參見msxml sdk document
xmldoc.waitForResponse 10 ' 通過waitForResponse方法等待文檔完全讀取完畢 ' 如果為讀取完成,系統暫停10毫秒
Loop
' 轉換xml -> html 并輸出文檔
xmldoc.transformNodeToObject xsldoc,Response
' 清空對象
Set xslt = Nothing
Set xsldoc = Nothing
Set xmldoc = Nothing
xslfile = "catalog.xsl"
' 創建相關對象
Set xslDoc = server.CreateObject("MSXML2.FreeThreadedDOMDocument")
Set xmlDoc = server.CreateObject("MSXML2.DOMDocument")
' 讀取xsl文件
xsldoc.async = False
xsldoc.resolveExternals = True
xsldoc.load server.MapPath(xslfile)
' 讀取xml文件
xmldoc.setProperty "ServerHTTPRequest",True ' 設置ServerHTTPRequest 屬性為 True 為了通過http協議載入xml文檔
xmldoc.async = False ' 設置 async屬性為 False 關閉異步調用
xmldoc.resolveExternals = True ' 設置 resolveExternals 為 True 打開外部DTD分析
xmldoc.validateOnParse = False ' 設置 validateOnParse 為 False 允許文檔驗證
xmldoc.load xmlfile ' 讀取xml文檔
Do While (xmldoc.ReadyState < 4) ' 檢查ReadyState狀態值是否為4 ' 具體數值定義參見msxml sdk document
xmldoc.waitForResponse 10 ' 通過waitForResponse方法等待文檔完全讀取完畢 ' 如果為讀取完成,系統暫停10毫秒
Loop
' 轉換xml -> html 并輸出文檔
xmldoc.transformNodeToObject xsldoc,Response
' 清空對象
Set xslt = Nothing
Set xsldoc = Nothing
Set xmldoc = Nothing
posted on 2006-01-19 14:52 瘋流成性 閱讀(5339) 評論(0) 編輯 收藏 所屬分類: VB項目