简体   繁体   English

如何从xml检索唯一值

[英]how to retrieve unique value from xml

i have written a query to retrieve distinct xml node value using foreach 我写了一个查询,以使用foreach检索不同的xml节点值
i am trying to retrive distinct BankName and TemplateModel from XML 我试图从XML检索不同的BankNameTemplateModel
can any one just a better way to write the query with ienumerable or something like that 谁能以更好的方式编写具有枚举或类似内容的查询
my Xml is as follows 我的Xml如下

<Bank>
<BankName BankName="DohaBank" TemplateModel="CT1">   
  <ChqBasics>      
  </ChqBasics>
  <XandYPosition>       
  </XandYPosition>
</BankName>
<BankName BankName="DohaBank" TemplateModel="CT2">   
  <ChqBasics>       
  </ChqBasics>
  <XandYPosition>        
  </XandYPosition>    
</BankName>  
<BankName BankName="IBQ" TemplateModel="CT1New">
    <ChqBasics>     
  </ChqBasics>
  <XandYPosition>     
  </XandYPosition>
</BankName> 

my c# code 我的C#代码

 public List<string> bankload()
    {
        List<string> bankname=new List<string>();
        XDocument doc = XDocument.Load("newtest.xml");
       var result= (from item in doc.Descendants("BankName")
                select (string)item.Attribute("BankName")).Distinct();
       foreach (var item in result)
       {
           bankname.Add(item.ToString());
       }
        return bankname;
    }

    public static List<string> templateload(string bankname)
    {
        List<string> templatename = new List<string>();
        XDocument doc = XDocument.Load("newtest.xml");
        var result = (from item in doc.Descendants("BankName")
                      where item.Attribute("BankName").Value == bankname
                      select (string)item.Attribute("TemplateModel")).Distinct();
        foreach (var item in result)
        {
            templatename.Add(item.ToString());
        }
        return templatename;
    }

i need to bind the result to a combobox 我需要将结果绑定到组合框

Why not do this? 为什么不这样做呢?

public List<string> bankload()
{
    return
    (
        from item in XDocument.Load("newtest.xml").Descendants("BankName")
        select (string)item.Attribute("BankName")
    )
        .Distinct()
        .ToList();
}

public static List<string> templateload(string bankname)
{
    return
    (
        from item in XDocument.Load("newtest.xml").Descendants("BankName")
        where item.Attribute("BankName").Value == bankname
        select (string)item.Attribute("TemplateModel")
    )
        .Distinct()
        .ToList();
}

Do you mean lambdas like this? 您是说这样的lambda吗?

public List<string> bankload()
{
    return
        XDocument
            .Load("newtest.xml")
            .Descendants("BankName")
            .Select(item => (string)item.Attribute("BankName"))
            .Distinct()
            .ToList();
}

public static List<string> templateload(string bankname)
{
    return
        XDocument
            .Load("newtest.xml")
            .Descendants("BankName")
            .Where(item => item.Attribute("BankName").Value == bankname)
            .Select(item => (string)item.Attribute("TemplateModel"))
            .Distinct()
            .ToList();
}

Return a list of distinct BankName/TemplateModel combinations in your XML: 返回XML中不同的BankName / TemplateModel组合的列表:

var result = doc.Descendants("BankName")
                .Select(bn => new
                              {
                                 BankName = bn.Attribute("BankName").Value,
                                 TemplateModel = bn.Attribute("TemplateModel")
                                                   .Value
                              });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM