[英]How to read XML data from a URL by using Visual C#
There are 1304 KeyFamily groups.有 1304 个 KeyFamily 组。
As an example: Quarterly National Accounts in XML.例如:XML 格式的季度国民账户。
The task is to combine all these 1304 families in one txt file using id and Name任务是使用 id 和 Name 将所有这些 1304 个家庭组合在一个 txt 文件中
This is the way how it must look like in txt file: QNA|Quartily National Accounts PAT_IND|..... ....|....这就是它在 txt 文件中的样子:QNA|Quartily National Accounts 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>
Try following which uses xml linq :尝试以下使用 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();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.