带有多个名称空间的LINQ to XML

希望您能提供帮助:-)
我被困在尝试使用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 }
上一篇:gdb 如何指定脚本执行


下一篇:Linux安装Redis CentOS 8