0

我的一个数据库表有很多记录,其中一列包含存储为字符串的 xml 数据。检索此数据并解析字符串以获取我希望绑定到我的 UI 的特定信息的最佳方法是什么。目前我正在这样做 -

我的 Customer 表的数据列将 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}"/>

这很有效,但我不确定这是否是正确的做事方式。性能是一个问题,那么以任何其他方式这样做会提高性能吗?

4

2 回答 2

2

你说性能是一个问题——但你衡量了吗?有问题吗?这应该是你的第一道攻击线。

就代码而言 - 我会更彻底地使用 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();
于 2012-05-23T16:32:59.920 回答
0

根据您需要从 XML 数据中获得的特定信息(从您的问题中不清楚 XML 是否实际存储为字符串或者这是否是您的目标?),您是否考虑过将其反序列化为对象然后提取那里的相关数据?

XSD 是一个很棒的 .NET 工具,它可以通过自动为您创建类来帮助解决这个问题。在http://www.cricketmx.com/articles/read/using-xsd-to-assist-in-xml-deserialisation-to-objects-in-c-sharp/有一些信息

于 2012-05-28T15:29:51.817 回答