如何使用Visual C#从URL读取XML数据

时间:2019-04-16 10:05:23

标签: c# xml

有1304个KeyFamily组。

例如: XML季度国民帐户。

任务是使用id和Name将所有1304系列合并到一个txt文件中

这是它在txt文件中的样子: QNA |季度国民账户 PAT_IND | ..... .... | ....

 while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.Write(reader.Value);

                    while (reader.MoveToNextAttribute()) 
                        Console.Write(reader.Value + "'");
                    Console.Write(">");
                    Console.WriteLine(">");
                    break;
                case XmlNodeType.Text: 
                    Console.WriteLine(reader.Value);
                    break;
                case XmlNodeType.EndElement: 
                    Console.Write("</" + reader.Name);
                    Console.WriteLine(">");
                    break;
            }
        }

<KeyFamily id="QNA" agencyID="OECD">...</KeyFamily>
<KeyFamily id="PAT_IND" agencyID="OECD">...</KeyFamily>
<KeyFamily id="SNA_TABLE11" agencyID="OECD">...</KeyFamily>
<KeyFamily id="EO78_MAIN" agencyID="OECD">
<Name xml:lang="en">
Economic Outlook No 78 - December 2005 - Annual Projections for OECD Countries
</Name>

1 个答案:

答案 0 :(得分:0)

尝试以下使用xml linq的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;


namespace ConsoleApplication108
{
    class Program
    {
        const string XML_FILENAME = @"c:\temp\test.xml";
        const string URL = "https://stats.oecd.org/restsdmx/sdmx.ashx/GetDataStructure/all";
        const string TEXT_FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.CheckCharacters = false;
            //XmlReader reader = XmlReader.Create(XML_FILENAME, settings);
            XmlReader reader = XmlReader.Create(URL, settings);
            StreamWriter writer = new StreamWriter(TEXT_FILENAME);
            while (!reader.EOF)
            {
                if (reader.Name != "KeyFamily")
                {
                    reader.ReadToFollowing("KeyFamily");
                }
                if (!reader.EOF)
                {
                    XElement keyFamily = (XElement)XElement.ReadFrom(reader);

                    List<string> columns = new List<string>();
                    columns.Add((string)keyFamily.Attribute("id"));
                    //string agencyID = (string)keyFamily.Attribute("agencyID");
                    columns.AddRange(keyFamily.Elements().Where(x => x.Name.LocalName == "Name").Select(x => (string)x));

                    writer.WriteLine(string.Join("|", columns));
                }
            }
            writer.Flush();
            writer.Close();

        }

    }


}