Данные:

<sys>
  <id>SCPUCLK</id>
  <label>CPU Clock</label>
  <value>2930</value>
</sys>
<sys>
  <id>CPUTEMP</id>
  <label>CPU Temp</label>
  <value>39</value>
</sys>

Это код, который я использую для чтения данных:

XmlDocument document = new XmlDocument();
document.LoadXml(data);
XmlElement node = document.SelectSingleNode("/sys/value") as XmlElement;
Console.WriteLine("node = " + node);

Проблема: Console.WriteLine("node = " + node); не дает мне никаких выходных данных, кроме node:, но не дает фактического значения, такого как 2930 из приведенного выше примера.

Благодарность

2
Csharpz 27 Авг 2011 в 07:41

2 ответа

Лучший ответ

В качестве альтернативы использованию XmlDocument вы также можете использовать LINQ to XML (что я предпочитаю):

using System.Xml.Linq;

XDocument xDoc = new XDocument();
// Parse loads the XDocument with XML from a string
xDoc = XDocument.Parse(data);

string node = (from x in xDoc.Root.Elements("value")
               select x.Value).SingleOrDefault();

Console.WriteLine("node = " + node);

Нет ничего плохого в использовании XmlDocument, особенно для того, что вы делаете, но вы можете попробовать LINQ to XML, когда у вас будет возможность, поскольку я считаю, что с ним намного проще работать, чем с XmlDocument.

Если вы хотите получить все элементы «значения», просто удалите SingleOrDefault() из запроса, а затем вы можете просмотреть результат в цикле, например:

var nodes = from x in xDoc.Root.Elements("value")
           select x.Value;

foreach (var node in nodes)
{
    Console.WriteLine("node = " + node);
}

Вот сайт, на который стоит заглянуть: LINQ to XML - 5-минутный обзор

2
Tim 28 Авг 2011 в 03:06

Используйте node.value, т.е. XmlElement.value

4
Schu 27 Авг 2011 в 03:43