2012-07-03 4 views
0

Я играю с импортированным XML-файлом и использую XMLDocument. Мне интересно, есть ли лучший способ сделать то же самое. В основном корень содержит узлы MHZ, и каждый MHZ содержит несколько устройств и одно имя. Я хочу, чтобы рассчитывать каждый Mhz узлы и отображать количество устройств в каждых МГЦ:Лучший способ просмотра узлов XML?

 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); 
     } 
+0

Вы можете использовать [serializer] (http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize (v = vs.71) .aspx), чтобы превратить ваш XML в более естественный объект C#. – RichardTowers

+0

@xenom: будет хорошо, если вы сможете предоставить файловую структуру xml, чтобы получить точное решение .. поскольку вы говорите, что MHZ содержит устройства и имя .. поэтому «имя» - это атрибут или элемент. Поэтому, пожалуйста, предоставьте xml –

ответ

1

Если вы с использованием .NET 3.5 или более поздней версии, я хотел бы использовать LINQ для 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()); 
} 
+0

I ' Попробую попробовать. – xenom

+0

И как бы вы сделали, чтобы написать имя каждого MHZ? 'Console.WriteLine (mhz.Elements (" name "));'? – xenom

+1

должна быть ошибка времени компиляции в этом коде ... в Console.WriteLine («Count of MHZ: {0}», mhz.Count()); это должно быть «mhzs.Count()» .... missing 's' from mhzs –

0

Создать сериализуемые объекты, а затем десериализации ваш XML в список объектов. Таким образом, вы можете оставаться верным ООП.

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

Или посмотрите на: DataContract XML serialization and XML attributes или How to Deserialize XML document

+0

Я думал о сериализации в начале, но мне нужно всего лишь просмотреть и распечатать несколько информации. Я нахожу это немного сложнее. Однако, если мне нужно больше операций, я сделаю это. – xenom

0

В некоторых случаях я создаю объект (ы), который представляет структуру XML и десериализация XML для этого объекта (ов) Это дает мне намного лучше способ просмотра данных, проверки и итерации через коллекции данных.

0

XMLDocument прост в использовании, поскольку вы уже используете его. Также стоит посмотреть на XPath

Смежные вопросы