Swing и мисс LINQ to XML запрос - PullRequest
       2

Swing и мисс LINQ to XML запрос

0 голосов
/ 15 декабря 2011

У меня есть следующий XML

<AllVendors xmlns="http://important/data">
    <Vendor>
      <VendorId>1</VendorId> 
      <VendorName>Vendor A</VendorName> 
    </Vendor>
    <Vendor>
      <VendorId>2</VendorId> 
      <VendorName>Vendor B</VendorName> 
    </Vendor>
    <Vendor>
      <VendorId>3</VendorId> 
      <VendorName>Vendor C</VendorName> 
    </Vendor>
</AllVendors>

и следующий тип CLR

class Vendor
{
    public Vendor(string vendorId, string vendorName)
    {
        VendorId = vendorId;
        VendorName = vendorName;
    }

    public string VendorId { get; set; }
    public string VendorName { get; set; }
}

и следующее основное взаимодействие

class VendorInteraction
{
    private List<Vendor> Vendors { get; set; }

    private void GetVendors(string xml)
    {
        var rawData = XElement.Parse(xml);
        XNamespace ns = Constants.TheNamespace;

        **var vendors = rawData.Descendants(ns + "AllVendors").Elements().Elements().Select(vendor => new Vendor(vendor.Value, vendor.Value)).ToList();**

        if (Vendors == null)
            Vendors = new List<Vendor>();
        else
            Vendors.Clear();

        Vendors.AddRange(vendors);
    }
}

Моя цель - вернуть список, который будет спроецирован на основе запроса LINQ to XML. Запрос, который у меня до сих пор, выдает такой результат:

1 1
Vendor A Vendor A
2 2 
Vendor B Vendor B
3 3
Vendor C Vendor C

Я бы хотел, чтобы каждый экземпляр Vendor в Списке выглядел следующим образом:

1 Vendor A
2 Vendor B
3 Vendor C

Я не очень хорош в LINQ, и ваша помощь чрезвычайно ценится!

Обновление: фактическое решение

var vendors = rawData.Descendants(ns + "AllVendors").Elements()
                     .Select(x => new Vendor(x.Element(ns + "VendorId").Value,
                                            x.Element(ns + "VendorName").Value))
                     .ToList();

@ AVD и @BrokenGlass очень близко подошли ко мне, но, похоже, мне нужно было собрать коллекцию Elements.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Попробуйте это,

var vendors = rawData.Descendants(ns+"Vendor")
                    .Select(x => new Vendor(x.Element(ns+"VendorId").Value,
                                            x.Element(ns+"VendorName").Value))
                    .ToList();
1 голос
/ 15 декабря 2011

Значения, которые вы хотите использовать как параметры конструктора для Vendor, сами являются вложенными элементами в элементе Vendor:

var vendors = rawData.Descendants(ns + "Vendor")
                     .Select(x => new Vendor(x.Element("VendorId").Value,
                                             x.Element("VendorName").Value))
                     .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...