使用C#从Web库加载多个XML

时间:2014-11-15 00:12:17

标签: c# xml

需要从具有不同标识符的多个链接加载和保存多个XML文件。 例如:

来自:

http:/...identifier=1
http:/...identifier=2
...
http:/...identifier=m

另存为:

file_1_1.xml
file_1_2.xml
file_2_1.xml
...
file_n_m.xml

XML看起来像:

<?xml version="1.0" encoding="utf-8"?>
    <OAI-PMH xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">
      <responseDate>...</responseDate>
      <request verb="GetRecord" identifier="1"</request>
      <GetRecord>
        <record>
          <header>
            <identifier>1</identifier>
            <datestamp>...</datestamp>
          </header>
          <metadata>
            <P3DM xmlns="..." xsi:schemaLocation="...">
              <MODELINFOID>1</MODELINFOID>
              <TITLE>Roth</TITLE>
  ....

代码如下:

static void Main(string[] args)
{
    var i = 1;
    do
    {
        XDocument doc = XDocument.Load(args[0] + "/?verb=GetRecord&metadataPrefix=p3dm&identifier=" + i);
        var node = doc.Descendants("identifier");
        foreach (var n in node)
        {
            doc.Save("file_" + i + "_" + n.Value + ".xml");
        }
    } while (i < 5);
}

2 个答案:

答案 0 :(得分:0)

尝试使用您所说的内容...如果您只想下载并保存xml文件,那么您无需使用XDocument对象查询它们吗?

只需使用WebClient对象下载它们 - 将代码修改为以下内容:

System.Net.WebClient webClient = new WebClient();

var i=1;
do
{
    string url = args[0] + "/?verb=GetRecord&metadataPrefix=p3dm&identifier=" + i);
    string destFilePath = @"C:\file" + i +".xml";

    webClient.DownloadFile(url,destFilePath);

} while (i < 5);

答案 1 :(得分:0)

好的 - 所以现在明白你想要“处理”xml文件中的某些内容而不是保存它们......

再看一下代码,我怀疑它是xml命名空间导致你遇到麻烦。

如果您将var node = doc.Descendants("identifier");替换为:

var node = doc.Descendants()
    .Where(d=>d.Name.LocalName=="identifier");

我相信你会更好......