将字符串列表转换为xml

问题描述:

我的一个数据库表中有许多记录,其中包含以字符串形式存储的xml数据的列。检索这些数据并解析字符串以获取我希望绑定到我的用户界面的特定信息的最佳方法是什么?目前,我这样做 -将字符串列表转换为xml

我的客户表中的数据列已作为字符串存储XML数据

List<string> myData = new List<string>(); 
//populate the list with the data from the customer table 
List<XElement> myXmlData = new List<XElement>(); 
foreach (var item in myData) 
{ 
     XElement xmlItem = XElement.Parse(item); 
     myXmlData.Add(xmlItem); 
} 

this.DataContext = myXmlData; 

我然后使用数据模板绑定到我时,需要使用XML数据以下

<TextBlock Text="{Binding Path=Element[Name].Value}"/> 

这是正确的,但我不确定它是否是正确的做事方式。性能是一个值得关注的问题,那么以其他任何方式改善性能会如何?

+1

谷歌XML数据绑定在WPF – JSJ

你说表现是担心 - 但你有没有测过它?是问题?这应该是你的第一线攻击。

在代码方面 - 我会更彻底地使用LINQ:

List<XElement> myXmlData = myData.Select(XElement.Parse).ToList(); 
this.DataContext = myXmlData; 

如果该方法组转换不起作用(规则是细微的,现在我不能方便地测试它)你可以使用lambda表达式:

List<XElement> myXmlData = myData.Select(x => XElement.Parse(x)).ToList(); 
this.DataContext = myXmlData; 

请注意,如果你的“填充列表”涉及LINQ,你可能能够做到整个事情一气呵成 - 例如,

this.DataContext = dbContext.Customers 
          .Select(c => c.CustomerXml) 
          .AsEnumerable() // Out of LINQ to SQL or whatever 
          .Select(XElement.Parse) 
          .ToList(); 

根据您从XML数据(XML是否实际存储为一个字符串或者这是否是你的目的是什么它是不是从你的问题清楚了吗?)所需的特定信息,你有没有考虑去将它序列化为对象,然后从那里提取相关数据?

XSD是一款出色的.NET工具,可以通过为您自动创建类来帮助实现此目的。有一些信息在http://www.cricketmx.com/articles/read/using-xsd-to-assist-in-xml-deserialisation-to-objects-in-c-sharp/