2014-12-24 47 views
1
[Serializable] 
public struct Item 
{ 
    public DateTime date; 
    public string title; 
    public string description; 
} 

Rss link
這是我現有的結構。我創建了一個從rss XML(上面提到)讀取數據的結構集合。具有根據標籤名稱 的值的集合表示RSS項目標籤具有日期,標題,描述和作者等。每個項目對象具有項目標籤(日期)值的項目(日期)值。但在上面提到的rss中沒有日期標籤,所以我的日期值變爲空白值,這是好的。但在我們的應用程序用戶集中,哪個標籤應該使用它可能是一個自定義標籤。現在我想創建一個結構,其變量將在使用字符串數據類型運行時間。如何用動態變量創建結構?

+0

爲什麼你關心的變量叫什麼名字?爲什麼不只有一個字符串變量,並且當你將它序列化爲XML時,在那一點使用適當的元素名稱? (我還建議*不*具有公共字段或可變結構,但這是另一回事)。我懷疑這裏的問題是您想要序列化自動發生,但聽起來您需要手動執行以獲取自定義元素名稱。 LINQ to XML使得它非常簡單。 –

+0

也許是http://stackoverflow.com/questions/3862226/dynamically-create-a-class-in-c-sharp – Mitja

+0

的副本@JonSkeet感謝主意,但一個rss包含大量tags.I不考慮爲每個輸入採石是可行的。 – madan

回答

1

通過使用下面的代碼我解決我的問題。

public class DynamicDictionary 
{ 
    private IDictionary<string, string> dictionaryKeyValuePair; 

    public DynamicDictionary() 
    { 
     dictionaryKeyValuePair = new Dictionary<string, string>(); 
    } 
    public void AddKeyValuePair(string key, string value) 
    { 
     dictionaryKeyValuePair.Add(key, value); 
    } 
    public string GetValueByKeyName(string Key) 
    { 
     string value = ""; 
     foreach (var keyValuePair in dictionaryKeyValuePair) 
     { 
      if (keyValuePair.Key.Equals(Key, StringComparison.CurrentCultureIgnoreCase)) 
      { 
       return keyValuePair.Value; 
      } 
     } 
     return value; 
    } 
} 

價值分配到列表

private Collection<string> tickerAtributesList=new Collection<string>(); 
tickerAtributesList.add("date"); 
tickerAtributesList.add("title"); 
tickerAtributesList.add("description"); 

XmlNodeList nodes = xmlDoc.SelectNodes("rss/channel/item"); 
keyValuePair = new Collection<DynamicDictionary>(); 
     foreach (XmlNode node in nodes) 
     { 
      DynamicDictionary tempDynamicDictionary = new DynamicDictionary(); 
      foreach (string tickerAtribute in tickerAtributesList) 
      { 
       tempDynamicDictionary.AddKeyValuePair(tickerAtribute, ParseDocElements(node, tickerAtribute)); 
      } 
      keyValuePair.Add(tempDynamicDictionary); 
     } 

和下面是如何使用

foreach (var item in keyValuePair) 
{ 
    foreach (string tickerAtribute in tickerAtributesList) 
    { 
     string tempAtributeVal = item.GetValueByKeyName(tickerAtribute); 
     //my code 
    } 
} 
0

因爲XML已經是您需要的結構,所以您不需要帶有動態[字符串]變量的新運行時結構。

string rssXml = "<xml>...</xml>"; 
XDocument doc = XDocument.Parse(rssXml); 
string date = doc.Root.Element("date"); 
string title = doc.Root.Element("title"); 
string dynamicVar = doc.Root.Element("dynamicVar"); 

即使您實現動態對象構建,您的業務邏輯中也不會有任何更改。

編輯

<xml> 
    <books> 
     <book id="1">FirstBook</book> 
     <book id="2">SecondBook</book> 
    </books> 
</xml> 

XDocument doc = XDocument.Parse(xml); 
foreach(XElement el in doc.Root.Element("books").Elements("book")) 
{ 
    string bookId = el.Attribute("id").Value; 
    string bookName = el.Value; 
} 
+0

您能否解釋一下如何使用提取的值循環遍歷每個項目 – madan

+0

@madan檢查我的編輯並建議您查看'LinqToXml'文檔 – opewix

+0

請檢查我的問題中的XML鏈接建議如何使用值XML – madan