RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1277204
Accepted
Senia_sweety
Senia_sweety
Asked:2022-05-02 03:22:11 +0000 UTC2022-05-02 03:22:11 +0000 UTC 2022-05-02 03:22:11 +0000 UTC

如何解析以下 XML?

  • 772

有一个 XML 文件:

<ValCurs Date="01.05.2021" name="Foreign Currency Market">
   <Valute ID="R01010">
      <NumCode>036</NumCode>
      <CharCode>AUD</CharCode>
      <Nominal>1</Nominal>
      <Name>Австралийский доллар</Name>
      <Value>58,1546</Value>
   </Valute>
   <Valute ID="R01020A">
      <NumCode>944</NumCode>
      <CharCode>AZN</CharCode>
      <Nominal>1</Nominal>
      <Name>Азербайджанский манат</Name>
      <Value>44,0524</Value>
   </Valute>
      <Valute ID="R01035">
      <NumCode>826</NumCode>
      <CharCode>GBP</CharCode>
      <Nominal>1</Nominal>
      <Name>Фунт стерлингов Соединенного королевства</Name>
      <Value>104,1694</Value>
   </Valute>
      <Valute ID="R01060">
      <NumCode>051</NumCode>
      <CharCode>AMD</CharCode>
      <Nominal>100</Nominal>
      <Name>Армянских драмов</Name>
      <Value>14,3761</Value>
   </Valute>
</ValCurs>

http://www.cbr.ru/scripts/XML_daily.asp XML 取自该资源。

问题是反序列化 XML 文件。这是要在 Main 中检查的类和输出信息的示例。
它目前给出一个错误

InvalidOperationException: ValCurs xmlns='' 不是预期的。

澄清:我正在使用.Netcore 3.1

[Serializable()]
[XmlRoot(ElementName = "ValCurs")]
class CurrencyClass
{
    [XmlElement(ElementName = "Valute")]
    public List<Valute> Valutes { get; set; }
}

[Serializable()]
class Valute
{
    [XmlAttribute(AttributeName = "ID")]
    public string ID { get; set; }
    [XmlElement(ElementName = "NumCode")]
    public string NumCode { get; set; }

    [XmlElement(ElementName = "CharCode")]
    public string CharCode { get; set; }
    [XmlElement(ElementName = "Nominal")]
    public string Nominal { get; set; }
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }
    [XmlElement(ElementName = "Value")]
    public string Value { get; set; }
}

static void Main(string[] args)
{
    var formatter = new XmlSerializer(typeof(DocumentClass));
    using (FileStream fs = new FileStream(@"D:\repositivs\ConsoleApp1\CurValute.xml", FileMode.Open))
    {
        var currencyTest = (CurrencyClass)formatter.Deserialize(fs);
        Console.WriteLine("Объект десериализован");
        foreach (Valute valute in currencyTest.Valutes)
        {
            Console.WriteLine("ID: {0}", valute.ID[0]);
            Console.WriteLine("Name: {0} ", valute.Name);
            Console.WriteLine("Nominal: {0}", valute.Nominal);
            Console.WriteLine("Value: {0} ", valute.Value);
        }
    }
}

另外,曾尝试使用 XmlReader,但未成功。

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    tym32167
    2022-05-02T04:13:28Z2022-05-02T04:13:28Z
    1. 我们打开第一个将 XML 转换为 C# 类的可用服务,将您的 XML 复制到那里,我们得到输出
        [XmlRoot(ElementName = "Valute")]
        public class Valute
        {
            [XmlElement(ElementName = "NumCode")]
            public string NumCode { get; set; }
            [XmlElement(ElementName = "CharCode")]
            public string CharCode { get; set; }
            [XmlElement(ElementName = "Nominal")]
            public string Nominal { get; set; }
            [XmlElement(ElementName = "Name")]
            public string Name { get; set; }
            [XmlElement(ElementName = "Value")]
            public string Value { get; set; }
            [XmlAttribute(AttributeName = "ID")]
            public string ID { get; set; }
        }
    
        [XmlRoot(ElementName = "ValCurs")]
        public class ValCurs
        {
            [XmlElement(ElementName = "Valute")]
            public List<Valute> Valute { get; set; }
            [XmlAttribute(AttributeName = "Date")]
            public string Date { get; set; }
            [XmlAttribute(AttributeName = "name")]
            public string Name { get; set; }
        }
    

    您也可以在工作室中使用 PasteSpecial->XML 作为类,会有类似的东西,只是稍微冗长一些。

    2.

            static void Main(string[] args)
            {
                Console.OutputEncoding = Encoding.UTF8; // для кирилицы
    
                var serializer = new XmlSerializer(typeof(ValCurs));
                using var reader = new StringReader(xml);
    
                var obj = serializer.Deserialize(reader) as ValCurs;
                Console.WriteLine($"{obj.Date} | {obj.Name}");
                foreach (var v in obj.Valute) 
                    Console.WriteLine($"{v.ID} | {v.Name} | {v.Nominal} | {v.NumCode} | {v.Value}");
            }
    

    线路本身

            static string xml = 
    @"<ValCurs Date=""01.05.2021"" name=""Foreign Currency Market"">
       <Valute ID=""R01010"">
          <NumCode>036</NumCode>
          <CharCode>AUD</CharCode>
          <Nominal>1</Nominal>
          <Name>Австралийский доллар</Name>
          <Value>58,1546</Value>
       </Valute>
       <Valute ID=""R01020A"">
          <NumCode>944</NumCode>
          <CharCode>AZN</CharCode>
          <Nominal>1</Nominal>
          <Name>Азербайджанский манат</Name>
          <Value>44,0524</Value>
       </Valute>
          <Valute ID=""R01035"">
          <NumCode>826</NumCode>
          <CharCode>GBP</CharCode>
          <Nominal>1</Nominal>
          <Name>Фунт стерлингов Соединенного королевства</Name>
          <Value>104,1694</Value>
       </Valute>
          <Valute ID=""R01060"">
          <NumCode>051</NumCode>
          <CharCode>AMD</CharCode>
          <Nominal>100</Nominal>
          <Name>Армянских драмов</Name>
          <Value>14,3761</Value>
       </Valute>
    </ValCurs>";
        }
    

    ...

    • 3

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5