Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中将xml数据解析为数组#_C#_Xml_Arrays - Fatal编程技术网

C# 在C语言中将xml数据解析为数组#

C# 在C语言中将xml数据解析为数组#,c#,xml,arrays,C#,Xml,Arrays,如何使用C#将XML数据解析为数组 你想要实现的就是所谓的——有很多方法可以实现它 在.NET framework中,对如何实现这一点有良好控制的较新类之一是。您可以在链接文档底部的示例中看到它是如何工作的 没有具体的例子,这是我所能帮助的。你想要实现的就是所谓的——有很多方法可以实现它 在.NET framework中,对如何实现这一点有良好控制的较新类之一是。您可以在链接文档底部的示例中看到它是如何工作的 没有具体的例子,我只能提供帮助。.Net中的Xml序列化/反序列化可以通过以下方式实现

如何使用C#将XML数据解析为数组


你想要实现的就是所谓的——有很多方法可以实现它

在.NET framework中,对如何实现这一点有良好控制的较新类之一是。您可以在链接文档底部的示例中看到它是如何工作的


没有具体的例子,这是我所能帮助的。

你想要实现的就是所谓的——有很多方法可以实现它

在.NET framework中,对如何实现这一点有良好控制的较新类之一是。您可以在链接文档底部的示例中看到它是如何工作的


没有具体的例子,我只能提供帮助。

.Net中的Xml序列化/反序列化可以通过以下方式实现:

  • 和System.Xml.Serialization命名空间中的Xml*属性
  • 和DataContract+DataMember属性
  • 和+Linq—处理原始xml文件

  • .Net中的Xml序列化/反序列化可通过以下方式实现:

  • 和System.Xml.Serialization命名空间中的Xml*属性
  • 和DataContract+DataMember属性
  • 和+Linq—处理原始xml文件

  • 从这个例子来看,在我看来,您希望得到:

    var rows = XDocument.Load("filename.xml")
                        .Root.Elements()
                        .Select(row => row.Elements()
                                          .ToDictionary(v => v.Attribute("name").Value,
                                                        v => v.Attribute("value").Value);
    
    这将创建一个
    IEnumerable
    ,其中
    IEnumerable
    中的每个条目都是一个“行”,而内部字典中的每个条目都是一个“变量”


    如果您希望创建一个更强类型的解决方案,并且可以保证XML结构始终是两个变量,一个名为
    budgetYear
    ,另一个名为
    account
    ,那么类似的方法可以工作:

    // Probably needs a better name.
    struct YearAndAccount
    {
        private readonly int budgetYear;
        private readonly string accountId;
    
        public int BudgetYear { get { return this.budgetYear; } }
        public string AccountId { get { return this.accountId; } }
    
        public YearAndAccount(int budgetYear, string accountId)
        {
            this.budgetYear = budgetYear;
            this.accountId = accountId;
        }
    }
    
    var rows = XDocument.Load("filename.xml")
                        .Root.Elements()
                        .Select(row => new YearAndAccount(
                            int.Parse(row.Elements().Single(el => el.Attribute("name").Value == "budgetYear")
                                                          .Attribute("value").Value),
                            row.Elements().Single(el => el.Attribute("name").Value == "account")
                                          .Attribute("value").Value));
    
    这将创建一个
    IEnumerable


    强类型解决方案的解析代码令人惊讶地讨厌,因为XML的结构非常糟糕;更好的结构应该是

    <details>
     <yearAndAccount>
       <budgetYear>2008</budgetYear>
       <account>10202</account>
     </yearAndAccount>
     <yearAndAccount>
       <budgetYear>2007</budgetYear>
       <account>11202</account>
     </yearAndAccount>
    </details>
    

    从这个例子来看,在我看来,您希望得到:

    var rows = XDocument.Load("filename.xml")
                        .Root.Elements()
                        .Select(row => row.Elements()
                                          .ToDictionary(v => v.Attribute("name").Value,
                                                        v => v.Attribute("value").Value);
    
    这将创建一个
    IEnumerable
    ,其中
    IEnumerable
    中的每个条目都是一个“行”,而内部字典中的每个条目都是一个“变量”


    如果您希望创建一个更强类型的解决方案,并且可以保证XML结构始终是两个变量,一个名为
    budgetYear
    ,另一个名为
    account
    ,那么类似的方法可以工作:

    // Probably needs a better name.
    struct YearAndAccount
    {
        private readonly int budgetYear;
        private readonly string accountId;
    
        public int BudgetYear { get { return this.budgetYear; } }
        public string AccountId { get { return this.accountId; } }
    
        public YearAndAccount(int budgetYear, string accountId)
        {
            this.budgetYear = budgetYear;
            this.accountId = accountId;
        }
    }
    
    var rows = XDocument.Load("filename.xml")
                        .Root.Elements()
                        .Select(row => new YearAndAccount(
                            int.Parse(row.Elements().Single(el => el.Attribute("name").Value == "budgetYear")
                                                          .Attribute("value").Value),
                            row.Elements().Single(el => el.Attribute("name").Value == "account")
                                          .Attribute("value").Value));
    
    这将创建一个
    IEnumerable


    强类型解决方案的解析代码令人惊讶地讨厌,因为XML的结构非常糟糕;更好的结构应该是

    <details>
     <yearAndAccount>
       <budgetYear>2008</budgetYear>
       <account>10202</account>
     </yearAndAccount>
     <yearAndAccount>
       <budgetYear>2007</budgetYear>
       <account>11202</account>
     </yearAndAccount>
    </details>
    

    我的意思是,给我们一个Xml示例,类描述。更多信息。是的,但您可能应该使用
    列表
    或其他类型安全集合,而不是
    数组
    。如何真正做到这一点取决于XML中数据的结构。请将此xml添加到您的问题中。@Lambo-您应该编辑问题并将xml添加到其中。我的意思是,给我们xml示例,类描述。更多信息。是的,但您可能应该使用
    列表
    或其他类型安全集合,而不是
    数组
    。如何真正做到这一点取决于XML中数据的结构。请将此xml添加到您的问题中。@Lambo-您应该编辑问题并将xml添加到其中。我要做的问题是将csv文件转换为xml,但它正在覆盖已存在的xml文件,因此我将从xml中读取数据并将其添加到生成的数据中以修改文件。通过这种方式,我可以添加一个检查重复数据和错误检查的检查器。@Lambo-您可以使用其中一个序列化程序类将XML反序列化为一个类,然后将CSV数据添加到列表中,并在删除重复数据后将其序列化为XML。我喜欢这种想法,我想做的问题是将csv文件转换为xml,但它已经覆盖了xml文件,所以我要从xml中读取数据,并将其添加到生成的数据中以修改文件。通过这种方式,我可以添加一个检查重复数据和错误检查的检查器。@Lambo-您可以使用其中一个序列化程序类将XML反序列化到一个类中,然后将CSV数据添加到列表中,并在删除重复数据后将其序列化为XML。我喜欢这个想法,可以尝试一下,然后返回给大家。