Помощь с запросом Linq to Xml - PullRequest
       2

Помощь с запросом Linq to Xml

3 голосов
/ 28 апреля 2011

У меня есть следующий XML в XDocument (подтверждено проверкой в ​​отладчике), сгенерированный с использованием XDocument.Parse (myXmlString)

<Size>
    <row SizeId="239" Title="XXS" Quantity="20"/>
    <row SizeId="240" Title="XS" Quantity="15"/>
    <row SizeId="241" Title="S" Quantity="12"/>
    <row SizeId="242" Title="M" Quantity="18"/>
</Size>

Я пытаюсь преобразовать его в список объектов, объявленных как:

public class SizeQuantityXml
{
    public int SizeId { get; set; }
    public string Title { get; set; }
    public int Quantity { get; set; }
}

Но когда я делаю это, sizeQuantityXmlList содержит только первую «строку»:

List<SizeQuantityXml> sizeQuantityXmlList = 

(from x in xDocument.Descendants("Size")
 select new SizeQuantityXml() { SizeId = (int)x.Element("row").Attribute("SizeId"),
                                Title = (string)x.Element("row").Attribute("Title"),
                                Quantity = (int)x.Element("row").Attribute("Quantity") }
).ToList();

Это моя первая попытка использования Linq to XML, и я очень ценю любое предложение: -)

1 Ответ

3 голосов
/ 28 апреля 2011

Вы запрашиваете Size элементов - которые у вас есть только один. Вы хотите сбор строк вместо:

var query = from row in xDocument.Element("Size").Descendants("row")
            select new SizeQuantityXml()
            { 
                SizeId = (int)row.Attribute("SizeId"),
                Title = (string)row.Attribute("Title"),
                Quantity = (int)row.Attribute("Quantity") 
            };

var sizeQuantityXmlList = query.ToList();

Edit:

Предложенное решение не будет работать, если ваш XML отличается от того, что вы опубликовали (например, обернуто большим количеством родительских тегов) Попробуйте Descendants("Size").Descendants("row"), как было предложено изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...