我有一段vb2005下开发的pda 远程读取 xml的数据到数组的代码,但我对xml的了解仅限于能写出下面这个文档而已。麻烦大家帮忙指点一下错误。先谢谢了。
<?xml   version="1.0"   encoding="UTF-8"?>   
  <letter>   
  <a>   
  <name>一月份</name>   
  <string>48.68</string>   
  </a>   
  <b>   
  <name>二月份</name>   
  <string>98.62</string>   
  </b>   
  <c>   
  <name>三月份</name>   
  <string>59.88</string>   
  </c>   
  <d>   
  <name>四月份</name>   
  <string>68.98</string>   
  </d>
   <e>   
  <name>五月份</name>   
  <string>78.55</string>   
  </e>
   <f>   
  <name>六月份</name>   
  <string>68.76</string>   
  </f>
  <g>   
  <name>七月份</name>   
  <string>75.61</string>   
  </g> 
  </letter> 
以下是pda的代码  
 Dim WebURL As String
        WebURL = "http://localhost:8080/xml.xml"
         Dim SendStr As String, XMLrandom As String, XMLObject As Object
        Dim ReadFileText As String        XMLObject = CreateObject("Microsoft.XMLHTTP")        Randomize()
        XMLrandom = Rnd() * Int((300 - 11 + 1) * Rnd() + 11)
        XMLObject.open("GET", WebURL + "?&num=" + XMLrandom, False)
        XMLObject.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded")
        XMLObject.setRequestHeader("content-length", Len(SendStr))
        XMLObject.send()        ReadFileText = StrConv(XMLObject.ResponseBody, "GB2312")               Label1.Text = ReadFileText        XMLMorntekDocument = CreateObject("Microsoft.XMLDOM")
        'XMLMorntekDocument.Async = False    ' 
        'XMLMorntekDocument.ValidateOnParse = False  '是否对文档进行验证        XMLMorntekDocument.Load(XMLObject.ResponseXML)
        Dim oRoot As string        oRoot = XMLMorntekDocument.documentElement        For i = 0 To oroot.childNodes.length
            ReDim Preserve daty(i)
            ReDim Preserve data(i)
            daty(i) = oRoot.childNodes(i).childNodes(0).text            data(i) = oRoot.childNodes(i).childNodes(1).text
         Next
       XMLMorntekDocument = Nothing
       XMLObject = Nothing
       End Sub
编辑的时候,编辑器就显示root的数据类型有问题,但是我真不知道应该是什么,而且由于数据类型没有对,所以也就没有调试过,应该有很多问题吧,谢谢,谢谢。

解决方案 »

  1.   

    ReadFileText = StrConv(XMLObject.ResponseBody, "GB2312") 呵呵,美好的梦想!
      

  2.   

    '引用xml对象
    Private Sub Form_Load()
        Dim WebURL As String
        WebURL = "http://localhost/xml.xml"
        Dim SendStr As String, XMLrandom As String, XMLObject As XMLHTTP
        Dim ReadFileText As String
        
        Set XMLObject = CreateObject("Microsoft.XMLHTTP")
        
        Randomize
        XMLrandom = Rnd() * Int((300 - 11 + 1) * Rnd() + 11)
        XMLObject.Open "GET", WebURL + "?&num=" + XMLrandom, False
        XMLObject.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
        XMLObject.setRequestHeader "content-length", Len(SendStr)
        XMLObject.Send
        Dim b() As Byte
        b = XMLObject.responseBody
        ReadFileText = Utf8ToUnicode(b)    Text1.Text = ReadFileText
        Dim XMLMorntekDocument As DOMDocument
        Set XMLMorntekDocument = CreateObject("Microsoft.XMLDOM")
        XMLMorntekDocument.async = False    '
        XMLMorntekDocument.validateOnParse = True  '是否对文档进行验证
        XMLMorntekDocument.loadXML Text1.Text 
        Dim oRoot As IXMLDOMElement    Set oRoot = XMLMorntekDocument.documentElement
        Dim i As Long, daty(), Data()
        For i = 0 To oRoot.childNodes.Length - 1
            ReDim Preserve daty(i)
            ReDim Preserve Data(i)
            daty(i) = oRoot.childNodes(i).childNodes(0).Text
            Debug.Print daty(i)
            Data(i) = oRoot.childNodes(i).childNodes(1).Text
            Debug.Print Data(i)
         Next
        Set XMLMorntekDocument = Nothing
        Set XMLObject = Nothing
    End Sub'mod.basOption ExplicitPrivate Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
    Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
    Private Const CP_UTF8 = 65001
    Function Utf8ToUnicode(ByRef Utf() As Byte) As String
        Dim lRet As Long
        Dim lLength As Long
        Dim lBufferSize As Long
        lLength = UBound(Utf) - LBound(Utf) + 1
        If lLength <= 0 Then Exit Function
        lBufferSize = lLength * 2
        Utf8ToUnicode = String$(lBufferSize, Chr(0))
        lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
        If lRet <> 0 Then
            Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
        End If
    End FunctionFunction UnicodeToUtf8(ByVal UCS As String) As Byte()
        Dim lLength As Long
        Dim lBufferSize As Long
        Dim lResult As Long
        Dim abUTF8() As Byte
        lLength = Len(UCS)
        If lLength = 0 Then Exit Function
        lBufferSize = lLength * 3 + 1
        ReDim abUTF8(lBufferSize - 1)
        lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UCS), lLength, abUTF8(0), lBufferSize, vbNullString, 0)
        If lResult <> 0 Then
            lResult = lResult - 1
            ReDim Preserve abUTF8(lResult)
            UnicodeToUtf8 = abUTF8
        End If
    End Function