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

本文关键字:XML 加载 Web 使用 | 更新日期: 2023-09-27 18:30:23

需要从具有不同标识符的多个链接加载和保存多个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);
}

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

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

再次查看代码后,我怀疑是 xml 命名空间给您带来了麻烦。

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

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

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

尽力

接受你说的话...如果您只想下载并保存 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);