2009-10-16 4 views
2

Друзья, я могу получить XML-файл с помощью пения байтов, возможно, что возникает какая-то проблема. Можете ли вы предложить альтернативный метод сделать то же самое, чтобы сохранить файл XML?Как читать XML-данные из URL-адреса с помощью vb.NET и сохранять

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 

ответ

6

Почему бы не просто использовать WebClient класс и его метод DownloadFile ?? Кажется намного проще ....

Это в C#, но вы не должны иметь никаких проблем преобразования, что в VB.NET:

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

и вы сделали!

Марк

0

Рассмотрите возможность использования XMLTextReader. Этот пример просто загружает весь XML в строку, но, очевидно, вы можете записать его в файл вместо:

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

Что делать, если служба посылает запрос на наш URL? Как настроить это, чтобы прочитать переданный им HTTP-поток? С таким трудным временем ... (Должен ли я сделать отдельный поток? Извините.)