[Serializable]
public struct Item
{
public DateTime date;
public string title;
public string description;
}
Rss link
这是我现有的结构。我创建了一个这个结构的集合,它从rss XML中读取数据(如上所述)。集合具有根据标签名称的值
表示RSS项目标签具有日期,标题,描述和作者等。每个项目对象具有项目标签的项目(日期)值(日期)值。但是在提到的rss中没有日期标记,所以我的日期值得到空白值这是好的。但在我们的应用程序中,用户设置哪个标签应该使用它可能是一个自定义标签。现在我想创建一个结构,其变量将创建于运行时使用字符串数据类型。
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
您不需要具有动态[string]变量的新运行时结构,因为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;
}