3

我正在尝试使用 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# 编写。感谢您的帮助!

4

1 回答 1

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);
                }
            }
        }
于 2012-07-09T13:35:46.687 回答