我有一个看起来像这样的XML:
<HiddenTopicsValues TopicCodes="TopicValues">
<Topic>
<Code>topic_aboutme</Code>
<Value>1</Value>
</Topic>
<Topic>
<Code>topic_aboutyou</Code>
<Value>1</Value>
</HiddenTopicsValues>
我的目标是创建一个字典,使<Code>
充当键,<Value>
充当(字典的值)。我声明了字典,如下所示:
Dictionary<string,int> dictionary_topics = new Dictionary<string,int>();
并使用for循环迭代XML中的所有值:
// Load XML Document
XmlDocument xmlTopics = new XmlDocument();
xmlTopics.Load(path);
// Get All Hidden Topics
XmlNodeList ndTopics = xmlTopics.GetElementsByTagName("Topic");
for (int i = 0; i < ndTopics.Count; i++)
{
string _topicCode = ndTopics[i].InnerText[0].ToString();
int _topicValue = ndTopics[i].InnerText[1].ToString();
// Add Topic to Dictionary
dictionary_topics.Add(_topicCode, _topicValue);
}
我以为:ndTopics[i].InnerText[0]
会返回此:topic_aboutme
并且此:ndTopics[0].InnerText[1]
将返回此:1
基于给定的XML。 我尝试显示ndTopics[0].InnerText
,它显示如下:
topic_aboutme1
如何分离topic_aboutme(<Code>)
和1(<Value>)
?
请原谅我的天真,在使用XML方面我并没有真正使用它。
在Xml Linq中非常简单:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
Dictionary<string, string> dict = doc.Descendants("Topic")
.GroupBy(x => (string)x.Element("Code"), y => (string)y.Element("Value"))
.ToDictionary(x => x.Key, y => y.FirstOrDefault());
}
}
}