【问题标题】:Better way to browse XML nodes?浏览 XML 节点的更好方法?
【发布时间】:2012-07-03 09:04:11
【问题描述】:

我正在使用导入的 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);
        }

【问题讨论】:

  • 您可以使用serializer 将您的 XML 转换为更自然的 C# 对象。
  • @xenom:如果你能提供 xml 文件结构来获得精确的解决方案,那就太好了。正如你所说的 MHZ 包含设备和名称。所以“名称”是属性或元素。所以请提供xml

标签: c# xml


【解决方案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());
}

【讨论】:

  • 你会怎么写每个MHZ的名字? Console.WriteLine(mhz.Elements("name")); ?
  • 应该是这段代码中的编译时错误...在 Console.WriteLine("Count of MHZ: {0}", mhz.Count());它应该是 'mhzs.Count()'.... 缺少 mhzs 中的 's'
【解决方案2】:

你看过 Linq to XML 欲了解更多信息,请查看此处 http://msdn.microsoft.com/en-us/library/bb387098.aspx

【讨论】:

    【解决方案3】:

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

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

    或查看:DataContract XML serialization and XML attributesHow to Deserialize XML document

    【讨论】:

    • 一开始我也在考虑序列化,但是我只需要浏览和打印一些信息。我觉得这有点复杂。但是,如果我需要更多操作,我会这样做。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      XMLDocument 很容易使用,因为您已经在使用它了。 XPath 也值得一看

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2020-09-20
        • 1970-01-01
        相关资源
        最近更新 更多