将字符串列表转换为 xml

本文关键字:xml 转换 列表 字符串 | 更新日期: 2023-09-27 18:35:18

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

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

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

将字符串列表转换为 xml

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

在代码方面 - 我会更彻底地使用 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/