Данные:
<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 ответа
В качестве альтернативы использованию 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-минутный обзор
Используйте node.value, т.е. XmlElement.value
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.