C# c语言中Linq到xml的转换#

C# c语言中Linq到xml的转换#,c#,.net,xml,linq,linq-to-xml,C#,.net,Xml,Linq,Linq To Xml,情景: 在WPF窗口中填充网格视图 代码隐藏中有一个静态列表(我想从xml文件中获取) 尝试将静态列表移动到xml文件中 <customers> <customer Name="abc"/> <customer Name="def"/> </customers> 我无法从xml文件中获取客户名称到customerList。如果有人能帮助我前进,我将不胜感激。请使用customer而不是Cusomters(xml区分大小写): 您很可能需要一个列表

情景:

  • 在WPF窗口中填充网格视图
  • 代码隐藏中有一个静态列表(我想从xml文件中获取)
  • 尝试将静态列表移动到xml文件中

    <customers>
    <customer Name="abc"/>
    <customer Name="def"/>
    </customers>
    

    我无法从xml文件中获取客户名称到customerList。如果有人能帮助我前进,我将不胜感激。

    请使用
    customer
    而不是
    Cusomters
    (xml区分大小写):


    您很可能需要一个
    列表
    ,因此不需要投影到匿名类-查询中也有输入错误(
    “Cusomters”
    ):

    或使用扩展方法语法:

    var customerList = doc.Descendants("Customer")
                          .Select( e => e.Attribute("Name").Value)
                          .ToList();
    
    “Cusomters”
    拼写错误,应为
    “Customers”

    显然,这不是您正在使用的代码,因为它甚至不编译。应该是这样的:

    XDocument doc = XDocument.Load( "customers.xml" );
    var customerList = (from e in doc.Descendants( "customer" )
            select new
            {
                CustomerName = e.Attribute( "Name" ).Value
            }).ToList();
    
    你真的应该提到它不会编译的事实。或者你用手抄错了,这也帮不了我们

    这里的逻辑问题是,您需要所有
    客户
    标签,请注意末尾的
    s
    。您确实需要查找
    Customer
    标记,这些标记具有
    name
    属性<代码>客户*只是顶级群体。

    我经常使用:

    doc.root.elements("Customer")
    

    对于像这样的小片段。

    -1子体按照广告(文档)的方式工作。更好地理解为什么你的代码不起作用,而不是说“哦,好吧,这种方式由于某些原因不起作用,我们将使用它来代替”。这应该得到-1。。。上帝啊你可以忽略它,它仍然是一个可行的选择。我和后代的问题不是别人的,我只是随便说说而已。。。有些人。。。嘘。。。抓紧点,这不是针对个人的,我只是觉得这不是个好答案。您声称使用
    .subjects
    无法可靠地工作,但您没有解释原因。那只会使初学者感到困惑。最重要的是,它展示了一种“伏都教”类型的编码风格,即“这不起作用,我们不知道为什么,就这样做吧”。在代码库中,这从来都不是一件好事。我还要补充一点,OP的问题与
    .subjects
    的使用完全无关,它只是一个打字错误。使用
    .subjections
    可以正常工作。我不反对这一点,但是。。使用发布的代码仍然是一个可行的选择,它会起作用,并且会得到OP想要的结果,因此-1是不合理的,可能会将其保留为0,或者如果我给出了一个完全虚假的代码片段,它将永远不会足够公平,那么就给-1,但在我看来,给一些实际有效的东西一个-1是不合理的。
    var customerList = doc.Descendants("Customer")
                          .Select( e => e.Attribute("Name").Value)
                          .ToList();
    
    XDocument doc = XDocument.Load( "customers.xml" );
    var customerList = (from e in doc.Descendants( "customer" )
            select new
            {
                CustomerName = e.Attribute( "Name" ).Value
            }).ToList();
    
    doc.root.elements("Customer")