2012-05-23 275 views
0

我的一個數據庫表中有許多記錄,其中包含以字符串形式存儲的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

回答

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(); 
0

根據您從XML數據(XML是否實際存儲爲一個字符串或者這是否是你的目的是什麼它是不是從你的問題清楚了嗎?)所需的特定信息,你有沒有考慮去將它序列化爲對象,然後從那裏提取相關數據?

XSD是一款出色的.NET工具,可以通過爲您自動創建類來幫助實現此目的。有一些信息在http://www.cricketmx.com/articles/read/using-xsd-to-assist-in-xml-deserialisation-to-objects-in-c-sharp/