编程之道

无论是批评的,赞扬的,指着的都请EMAIL给我,你的建议将是我前进的动力! 联系我

如何通过VB处理XML

  1. 首先要引用一个Microsoft XML 随便选个版本。
  2. 在初始化的时候读取XML显示到TXTBOX中,代码如下:
    '通过2进制流将XML文件读出来,也可以是其它文件格式
    Private
     Function pstrUpdateView(istrXMLPath As StringAs 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 StringAs 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 StringAs 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


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

posted on 2006-01-19 14:52 疯流成性 阅读(5321) 评论(0)  编辑  收藏 所属分类: VB项目


只有注册用户登录后才能发表评论。


网站导航: