希望您能提供帮助:-)
我被困在尝试使用LINQ来读取C#中的XML文件.
这是XML结构:
<DataBase
xsi:schemaLocation="http://somestuff.new/xml http://somestuff.xsd"
xmlns:ns5="http://somestuff.new/ns5"
xmlns:ns3="http://somestuff.new/ns3"
xmlns:ns2="http://somestuff.new/ns2"
xmlns="http://somestuff.new/ns"
xmlns:xsi="http://somestuff.new/XMLScema-instance"
xmlns:ns4="http://somestuff.new/ns4">
<Cars>
<SmallCars attribute="Something">
<Id>licenceplate</Id>
<Parts attribute="All Parts">
<Extras>
<Gauges xmlns="http://somestuff.new/ns32>
<Speed>100</Speed>
<Rpm>3200</Rpm>
</Gauges>
</Extras>
</Parts>
</SmallCars>
</Cars>
</DataBase>
我想使用LINQ从Speed和RPM中读取值,但是我尝试的一切似乎都失败了…
这是我的尝试之一:
XNamespace ns3 = XNamespace.Get("http://somestuff.new/ns3");
from gaugeElement in extentionElement.Descendants(ns3 + "Gauges")
select new Gauge
{
Speed = tpxElement.Element(ns3 + "Speed") != null ? Convert.ToDouble(tpxElement.Element(ns3 + "Speed").Value) : 0.00,
Rpm = tpxElement.Element(ns3 + "Rpm") != null ? Convert.ToInt32(tpxElement.Element(ns3 + "Rpm").Value) : 0
}
我正在使用必须具有属性的Gauge类:
public int Speed { get; set; }
public int Rpm { get; set; }
我希望你们中的一个聪明人能为我提供一个示例,说明如何获得这些价值或解释为什么我对价值的追求失败:-)
解决方法:
您的查询表达式声明了一个名为gaugeElement的范围变量,但是您随后在代码中使用了tpxElement.我还将使用XElement提供的转换来使您的代码更易于阅读-而且我个人甚至不会使用查询表达式:
using System;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var doc = XDocument.Load("test.xml");
XNamespace ns = "http://somestuff.new/ns3";
var gauges = doc
.Descendants(ns + "Gauges")
.Select(x => new { // You'd use new Gauge here
Speed = (double?) x.Element(ns + "Speed") ?? 0.0,
Rpm = (int?) x.Element(ns + "Rpm") ?? 0
});
foreach (var gauge in gauges)
{
Console.WriteLine(gauge);
}
}
}
输出(修复XML后):
{ Speed = 100, Rpm = 3200 }