如何通过VB处理XML

1. 首先要引用一个Microsoft XML 随便选个版本。
2. 在初始化的时候读取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
3. 装载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
4.
读属性。DOMDocument对象里有2个读节点的方法:
1.
selectNodes() 如果根节点下有多个子节点就要用这个方法,item定义了第几个子节点
2.
selectSingleNode()如果根节点下只有一个字节点可以用这个方法

1. 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
5.
读节点。 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
6.
写节点。参数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 = istrValue

Set wobjXMLNode = Nothing
End Sub


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值