将XML文件读入TreeView

时间:2012-07-09 13:20:43

标签: c# xml treeview visual-studio-2005

我正在尝试使用TreeView控件将XML文件加载到我的GUI上。 但是,我正在为我的XML文件使用专有布局。

XML的结构如下:

<ConfiguratorConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Section>
        <Class ID="Example" Name="CompanyName.Example" Assembly="Example.dll">
            <Interface>
                <Property Name="exampleProperty1" Value="exampleValue" />
                <Property Name="exampleProperty2" Value="exampleValue" />
                <Property Name="exampleProperty3" Value="exampleValue" />
            </Interface>
        </Class>
    </Section>
</ConfiguratorConfig>

我希望输出的结构如下:

Class "Example"
    Property "exampleProperty1"
    Property "exampleProperty2"
    Property "exampleProperty3"

我完全不习惯使用XML。过去几个小时我一直在网上搜索,结果都没有帮助。有些已接近,但可能属性不会显示,或节点的名称将不会显示等。

我在Visual Studio 2005中用c#编写。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用XmlDocument迭代节点,您可以将此演示放在控制台应用程序的Main方法中:

        string xml = @"<ConfiguratorConfig xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
<Section>
    <Class ID=""Example"" Name=""CompanyName.Example"" Assembly=""Example.dll"">
        <Interface>
            <Property Name=""exampleProperty1"" Value=""exampleValue"" />
            <Property Name=""exampleProperty2"" Value=""exampleValue"" />
            <Property Name=""exampleProperty3"" Value=""exampleValue"" />
        </Interface>
    </Class>
</Section></ConfiguratorConfig>";

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);

        foreach (XmlNode _class in doc.SelectNodes(@"/ConfiguratorConfig/Section/Class"))
        {
            string name = _class.Attributes["ID"].Value;
            Console.WriteLine(name);

            foreach (XmlElement element in _class.SelectNodes(@"Interface/Property"))
            {
                if (element.HasAttribute("Name"))
                {
                    string nameAttributeValue = element.Attributes["Name"].Value;
                    Console.WriteLine(nameAttributeValue);
                }
            }
        }

如果您使用的.NET版本高于3.0,则可以使用XDocument类(如果可以选择,建议使用)。

        XDocument xdoc = XDocument.Parse(xml);
        foreach (XElement _class in xdoc.Descendants("Class"))
        {
            string name = _class.Attribute("ID").Value;
            Console.WriteLine(name);

            foreach (XElement element in _class.Descendants("Property"))
            {
                XAttribute attributeValue = element.Attribute("Name");
                if (attributeValue != null)
                {
                    string nameAttributeValue = attributeValue.Value;
                    Console.WriteLine(nameAttributeValue);
                }
            }
        }