如何在Visual Basic .NET中从Internet“读取”XML?

时间:2011-07-21 22:42:30

标签: xml vb.net

所以我在Visual Basic 2010中创建了一个程序,它将从互联网上传输大约120万个XML文件。每个文件的URL采用以下格式:

website.com/xmlfeed.action?number=VARIABLE

其中“VARIABLE”是1到120万之间的数字。获得文档后,我需要XML中的一个特定值。文档树的相关部分采用以下格式:

<XMLResponce>
 <SectionA>
   <SectionB>
    <Value> 250 </Value>
  </SectionB>
 </SectionA>
</XMLResponce>

我需要提取的数据是“值”。

我今天花了一段时间在网上搜索,但空手而归。我找到的所有东西要么无关紧要,要么太复杂,我无法理解。我认为问题在于我不熟悉与XML相关的术语。

我非常欣赏易于理解的解决方案或易于理解的解决方案的链接。如果不是太麻烦,请解释它是如何工作的,因为我正在努力学习。

2 个答案:

答案 0 :(得分:2)

要下载该文件的副本,您可以使用HttpWebRequest。您可以在一个循环中调用GetResponse(或者如果您希望它们是异步的,则为BeginGetResponse),您可以根据递增的Integer生成URL。

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

要解析文件有很多选项,但Linq到Xml可能是一个不错的选择。

http://msdn.microsoft.com/en-us/library/bb387098.aspx

Dim requestPrefix = "website.com/xmlfeed.action?number="

For documentNumber = 1 To 1200000
    Dim request = WebRequest.Create(requestPrefix & documentNumber)
    request.Timeout = 5000
    Dim response = request.GetResponse()

    Using stream = response.GetResponseStream()
        Dim xDocument = XDocument.Load(stream)

        'Use Linq to Xml to get the value you are after from the XDocument.
    End Using
Next

答案 1 :(得分:1)

VB中的LINQ to XML使这非常轻松。以下未经过测试,因此YMMV:

Dim values = From index in Enumerable.Range(1, 2100000)
             From doc in XDocument.Load(New Uri("http://website.com/xmlfeed.action?number=" & index))
             Select value in doc...<Value>.FirstOrDefault()

这将为您提供每个xml中具有第一个值节点的IEnumerable。根据XML的大小,您可能需要更改此方法,因为XDocument.Load会在处理之前将整个xml文档加载到内存中。