我有这样的类结构:
[XmlRoot(ElementName = "Details")]
public class Details
{
[XmlElement(ElementName = "Size")]
public string Size { get; set; }
[XmlElement(ElementName = "Length")]
public string Length { get; set; }
}
[XmlRoot(ElementName = "Notes")]
public class Notes
{
[XmlElement(ElementName = "Text")]
public string Text { get; set; }
}
[XmlRoot(ElementName = "Data")]
public class Data
{
[XmlElement(ElementName = "ID")]
public string ID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "FileName")]
public string FileName { get; set; }
[XmlElement(ElementName = "Status")]
public string Status { get; set; }
[XmlElement(ElementName = "Date")]
public string Date { get; set; }
[XmlElement(ElementName = "Details")]
public Details Details { get; set; }
[XmlElement(ElementName = "Notes")]
public Notes Notes { get; set; }
}
[XmlRoot(ElementName = "AllData")]
public class AllData
{
[XmlElement(ElementName = "Data")]
public Data[] Data { get; set; }
}
我有一个要求在哪里,我只想更新这个类的一部分,例如。更新id = 1的数据(Name,fileName,Status,Details等),然后将整个AllData属性写入xml文件。
我正在使用XML序列化程序从XML文件中读取数据,并将其显示在允许用户修改数据的文本框中。一旦用户修改了数据,就必须将其放回到相同的XMl文件中。
我尝试使用linq但没有正确使用它。
这将返回我想要修改的所有相关数据。
Data data= new Data();
data = (from data in AllData.data
where data.ID == "1"
select data).FirstOrDefault();
现在我想修改ID = 1的数据: 像这样的东西:
var query = (from records in recordings.Record
where records.ID == "1"
select records).Select(x => { x.Name = "foo"; return x; }).FirstOrDefault();
答案 0 :(得分:1)
LinQ表示 L 集合 q uery 中的 anguage 。它用于查询数据,而不是操纵数据。
您选择了要操作的数据:
var data = (from data in AllData.data where data.ID == "1" select data).ToList();
就个人而言,我更喜欢方法语法,但它确实是相同的:
var data = AllData.data.Where(data => data.ID == "1").ToList();
现在您拥有了数据,您需要对其进行操作。用老式的方式:
foreach(var d in data)
{
d.Name = "foo";
}
现在您的数据已更改。您可能希望显示更改或将其写入文件。
答案 1 :(得分:0)
由于您使用的是C#
类,因此您只需将这些对象序列化回Xml
,不太确定为什么要直接处理Xml
。
您可以使用XmlSerializer
序列化Xml
并保存文件。
XmlSerializer serializer = new XmlSerializer(typeof(AllData));
using(StringWriter sww = new StringWriter())
using(XmlWriter writer = XmlWriter.Create(sww))
{
serializer.Serialize(writer, alldata); // your object
var xml = sww.ToString(); // your xml.
// save your xml
}