C# 具有多个名称空间的LINQ到XML

C# 具有多个名称空间的LINQ到XML,c#,xml,linq,namespaces,C#,Xml,Linq,Namespaces,我希望你能帮忙:- 我一直在尝试使用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://som

我希望你能帮忙:- 我一直在尝试使用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>
我使用的Gauge类必须具有以下属性:

public int Speed { get; set; }
public int Rpm { get; set; }

我希望你们中的一位聪明人能为我提供一个如何获取这些值的示例,或者解释为什么我对这些值的搜索失败:-

您的查询表达式声明了一个名为GaugeeElement的范围变量,但您随后在代码中使用了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 }

这管用!我能问一下,如果我想制作一类汽车,然后在xml中执行如下操作:var Cars=from car。后代sns+Cars选择新零件{Extras=from Parts.后代sns3+Gauges.Selectx=>new{//在这里你应该使用新的仪表,速度=double?x.Elementns3+Speed?0.0,Rpm=int?x.Elementns3+Rpm??0};我似乎无法让它工作?很抱歉,这条评论中的代码。我是新来这里的,所以我不能100%确定怎么做?:-顺便说一句,谢谢你迄今为止的帮助!-@Sasquatch:我似乎无法让它工作,但并没有说太多。这听起来像是一个不同的问题,所以你应该问一个新问题,说明你有多远到目前为止,你已经知道了发生了什么。是的,我要问一个新问题:-
{ Speed = 100, Rpm = 3200 }