Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 浏览XML节点的更好方法?_C#_Xml - Fatal编程技术网

C# 浏览XML节点的更好方法?

C# 浏览XML节点的更好方法?,c#,xml,C#,Xml,我正在处理一个导入的XML文件并使用XMLDocument,我想知道是否有更好的方法来做同样的事情。 基本上,root包含MHZ节点,每个MHZ包含几个设备和一个名称。 我想计算每个MHZ节点的数量,并显示每个MHZ中的设备数量: String xmlName = "tts.xml"; XmlDocument readDoc = new XmlDocument(); readDoc.Load(xmlName); int fileNb

我正在处理一个导入的XML文件并使用XMLDocument,我想知道是否有更好的方法来做同样的事情。 基本上,root包含MHZ节点,每个MHZ包含几个设备和一个名称。 我想计算每个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);
        }
String xmlName=“tts.xml”;
XmlDocument readDoc=新的XmlDocument();
readDoc.Load(xmlName);
int fileNb=readDoc.SelectNodes(“//MHZ”).Count;
Console.WriteLine(“MHZ编号:+fileNb”);
对于(int i=0;i
您看过Linq到XML吗 欲了解更多信息,请点击此处
如果您使用的是.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());
}

创建可序列化对象,然后将xml反序列化为对象列表。这样,您就可以忠实于OOP

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

或者查看:或者在某些情况下,我创建了表示XML结构的对象,并将XML反序列化为这些对象。这为我提供了查看数据、验证和迭代数据集合的更好方法。

XMLDocument很容易使用,因为您已经在使用它。同样值得一看的是XPath

您可以使用将XML转换为更自然的C#对象。@xenom:如果您可以提供XML文件结构以获得精确的解决方案,那就太好了。。正如您所说,MHZ包含设备和名称。。所以“name”是属性或元素。。所以请提供xmlI,我一开始考虑序列化,但我只需要浏览和打印一些信息。我觉得这有点复杂。但是,如果我需要更多的操作,我会这样做。你会如何写每个MHZ的名称<代码>Console.WriteLine(mhz.Elements(“名称”)?应该是此代码中的编译时错误…在Console.WriteLine(“MHZ计数:{0}”,MHZ.Count());它应该是“mhzs.Count()”。。。。MHZ中缺少“s”