0

インポートされた XML ファイルで遊んでおり、XMLDocument を使用していますが、同じことを行うためのより良い方法があるかどうか疑問に思っています。基本的に、ルートには MHZ ノードが含まれ、各 MHZ には複数のデバイスと 1 つの名前が含まれます。すべての MHZ ノードをカウントし、各 MHZ 内のデバイスの数を表示したい:

        String xmlName = "tts.xml";
        XmlDocument readDoc = new XmlDocument();
        readDoc.Load(xmlName);
        int fileNb = readDoc.SelectNodes("//MHZ").Count;
        Console.WriteLine("MHZ number : "+fileNb);
        for (int i = 0; i < fileNb; i++)
        {   
            int deviceNb = readDoc.SelectNodes("//MHZ[" +(i+1)+ "]/device").Count;
            Console.WriteLine(deviceNb);
        }
4

5 に答える 5

1

.NET 3.5 以降を使用している場合は、LINQ to XML を使用します。

var doc = XDocument.Load(xmlName);
var mhzs = doc.Descendants("MHZ");
Console.WriteLine("Count of MHZ: {0}", mhz.Count());
foreach (var mhz in mhzs)
{
    Console.WriteLine(mhz.Elements("device").Count());
}
于 2012-07-03T09:07:38.287 に答える
0

詳細については、Linq to XML をご覧 ください http://msdn.microsoft.com/en-us/library/bb387098.aspx

于 2012-07-03T09:07:37.563 に答える
0

シリアル化可能なオブジェクトを作成し、xml をオブジェクトのリストに逆シリアル化します。このようにして、OOP に忠実であり続けることができます。

[DataContract]
public class Device
{
   [DataMember]
   public string Property { get; set; }
}

または、以下を参照してください: DataContract XML シリアライゼーションと XML 属性またはXML ドキュメントをデシリアライズする方法

于 2012-07-03T09:08:16.733 に答える
0

場合によっては、XML の構造を表すオブジェクトを作成し、XML をこれらのオブジェクトに逆シリアル化します。これにより、データを確認し、データのコレクションを検証して反復処理する方法が大幅に改善されます。

于 2012-07-03T09:08:32.750 に答える
0

XMLDocument is easy to use as your are already using it. Also it's worth to look at XPath

于 2012-07-03T09:09:29.743 に答える