You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中XML解析:如何从指定XML站点提取USD/TRY、GBP/TRY、EUR/TRY的外汇买入价并封装为List<ParaBirimi>

从TCMB XML中提取特定汇率数据并封装到自定义类

我明白你现在的需求:已经能读取TCMB的XML汇率数据,但不知道怎么精准筛选出USD、GBP、EUR的外汇买入价,还要把这些数据封装到你定义的ParaBirimi类里,最后返回一个List集合。

首先说一下,你原来用的XmlTextReader其实已经是过时的API了,现在更推荐用LINQ to XML(也就是XDocument类)来处理XML,代码会简洁很多,而且更容易定位到你需要的节点。下面我给你完整的实现方案:

第一步:准备工作

确保你的项目引用了System.Xml.Linq和System.Collections.Generic命名空间,前者用来处理XML,后者用来创建List集合。

你的ParaBirimi类可以保留,不用修改:

public class ParaBirimi
{
    public decimal ForexBuying { get; set; }
    public string Name { get; set; }//Values like USD GBP EUR
}

第二步:实现数据提取与封装

我把核心逻辑放到一个单独的方法里,这样代码更清晰,也方便复用。下面是完整的控制台程序代码:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Xml.Linq;

namespace ConsoleApp1
{
    public class ParaBirimi
    {
        public decimal ForexBuying { get; set; }
        public string Name { get; set; } // Values like USD GBP EUR
    }

    class Program
    {
        static void Main(string[] args)
        {
            string xmlUrl = "https://www.tcmb.gov.tr/kurlar/today.xml";
            List<ParaBirimi> targetRates = GetTargetExchangeRates(xmlUrl);

            // 测试输出结果
            foreach (var rate in targetRates)
            {
                Console.WriteLine($"{rate.Name} 外汇买入价: {rate.ForexBuying:N4}");
            }
        }

        static List<ParaBirimi> GetTargetExchangeRates(string xmlUrl)
        {
            // 定义你需要的目标货币列表
            var targetCurrencies = new List<string> { "USD", "GBP", "EUR" };
            var resultList = new List<ParaBirimi>();

            try
            {
                // 加载XML文档
                XDocument xmlDoc = XDocument.Load(xmlUrl);

                // 用LINQ查询筛选出目标货币的节点
                var filteredCurrencies = xmlDoc.Descendants("Currency")
                    .Where(curr => targetCurrencies.Contains((string)curr.Attribute("CurrencyCode")));

                foreach (var currencyNode in filteredCurrencies)
                {
                    // 提取外汇买入价的文本,注意土耳其的数值格式是用逗号做小数点
                    string buyingPriceText = currencyNode.Element("ForexBuying").Value;
                    if (decimal.TryParse(buyingPriceText, NumberStyles.Float, CultureInfo.GetCultureInfo("tr-TR"), out decimal buyingPrice))
                    {
                        resultList.Add(new ParaBirimi
                        {
                            Name = (string)currencyNode.Attribute("CurrencyCode"),
                            ForexBuying = buyingPrice
                        });
                    }
                    else
                    {
                        // 处理解析失败的情况,比如记录日志
                        Console.WriteLine($"无法解析{currencyNode.Attribute("CurrencyCode")}的买入价: {buyingPriceText}");
                    }
                }
            }
            catch (Exception ex)
            {
                // 处理网络或XML加载异常
                Console.WriteLine($"获取汇率数据失败: {ex.Message}");
            }

            return resultList;
        }
    }
}

关键细节说明

  1. 用XDocument替代XmlTextReader:XDocument.Load()可以直接加载远程XML,然后用LINQ语法快速定位到所有<Currency>节点,比手动遍历流节点高效太多。
  2. 筛选目标货币:通过Where条件过滤出CurrencyCode属性为USD、GBP、EUR的节点,精准定位你需要的数据。
  3. 数值解析注意事项:TCMB返回的数值是土耳其地区格式(比如28,7500),所以解析时必须指定tr-TR文化信息,否则会因为小数点符号不匹配导致解析失败。
  4. 异常处理:添加了try-catch块处理网络异常、XML加载失败等情况,让程序更健壮。

这样运行程序后,你就能得到一个包含USD、GBP、EUR外汇买入价的List<ParaBirimi>集合了。

内容的提问来源于stack exchange,提问作者Oytun Tur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:22:42