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