2009-10-16 8 views
2

Amis, je peux obtenir un fichier XML en chantant des octets, ce qui peut poser problème. Pouvez-vous me suggérer une méthode alternative pour faire la même chose pour sauvegarder le fichier XML?Comment lire les données XML à partir d'une URL en utilisant vb.NET et enregistrer

Try 
     Dim strUrl As String = "http://example.com" 
     Dim wr As HttpWebRequest = CType(WebRequest.Create(strUrl), HttpWebRequest) 
     Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse) 
     ws.ContentType = "UTF-16" 
     Dim str As Stream = ws.GetResponseStream() 
     Dim inBuf(100000) As Byte 
     Dim bytesToRead As Integer = CInt(inBuf.Length) 
     Dim bytesRead As Integer = 0 
     While bytesToRead > 0 
      Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead) 
      If n = 0 Then 
       Exit While 
      End If 
      bytesRead += n 
      bytesToRead -= n 
     End While 
     Dim fstr As New FileStream("c:/GetXml.xml", FileMode.OpenOrCreate, FileAccess.Write) 
     fstr.Write(inBuf, 0, bytesRead) 
     str.Close() 
     fstr.Close() 
    Catch ex As WebException 
     Response.Write(ex.Message) 
    End Try 

Répondre

6

Pourquoi ne pas simplement utiliser la classe WebClient et sa méthode DownloadFile ?? Il semble beaucoup plus facile ....

Ceci est en C#, mais vous ne devriez avoir aucun mal à convertir que pour VB.NET:

WebClient wc = new WebClient(); 
wc.DownloadFile("http://xyz", @"C:\getxml.xml"); 

et vous avez terminé!

Marc

0

Envisagez d'utiliser XMLTextReader. Cet exemple charge simplement le code XML entier dans une chaîne, mais évidemment vous pouvez l'écrire dans un fichier à la place:

Dim strUrl As String = "http://xyz.com" 
    Dim reader As XmlTextReader = New XmlTextReader(strUrl) 
    Dim output as String 

    Do While (reader.Read()) 
     Select Case reader.NodeType 
      Case XmlNodeType.Element 

       Output = Output + "<" + reader.Name 

       If reader.HasAttributes Then 
        While reader.MoveToNextAttribute() 
         Output = Output + " {0}='{1}'", reader.Name, reader.Value) 
        End While 
       End If 
       Output = Output + ">" 
      Case XmlNodeType.Text 
       Output = Output + reader.Value 
      Case XmlNodeType.EndElement 
       Output = Output + "</" + reader.Name + ">" 
     End Select 
    Loop 
0

si le service envoie la demande à notre URL? Comment puis-je ajuster cela pour lire le flux http qu'ils envoient? Avoir un moment si difficile ... (Dois-je faire un fil séparé? Désolé.)

Questions connexes