在XML节点上获取每个值

问题描述 投票:0回答:1

我有一个看起来像这样的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方面我并没有真正使用它。

c# xml unity3d
1个回答
0
投票

在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());
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.