所以我在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相关的术语。
我非常欣赏易于理解的解决方案或易于理解的解决方案的链接。如果不是太麻烦,请解释它是如何工作的,因为我正在努力学习。
答案 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文档加载到内存中。