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 を使用するのはまったく初めてです。過去数時間、Web を検索してきましたが、どれも役に立ちませんでした。近いものもありますが、おそらくプロパティが表示されなかったり、ノードの名前が表示されなかったりします。

私は 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);
                }
            }
        }

3.0 以上のバージョンの .NET を使用している場合は、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 に答える