xElement Linq Создание списка - PullRequest
5 голосов
/ 30 декабря 2011

Я создал новый класс для чтения данных из файла XML, который выглядит следующим образом:

public class Validations
{
  public string id { get; set; }
  public List<string> lhsList { get; set; }
  public List<string> rhsList { get; set; }
}

XML Я пытаюсь прочитать это:

<root>
<Validation id="val3">
    <lhs id='Estimated' />
    <lhs id='Newqurter' />
    <rhs id='Current' />
    <rhs id='FirstQuarter' />
</Validation>
.
.
.

</root>

Код, который я написал для прочтения xml:

List<Validations> vList = new List<Validations>();
vList = (from XElement xele in xdoc.Root.Elements()
  select new Validations
  { 
    id = xele.Attribute("id").Value.ToString(),
    // lhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "lhs").FirstAttribute.Value
    // rhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "rhs").FirstAttribute.Value
  }
).ToList<Validations>();

Как читать List<lhsList>? Я пытался

lhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "lhs").FirstAttribute.Value).ToList(), 

Но он не работает, как ожидалось. Какие могут быть другие способы сделать это?

1 Ответ

7 голосов
/ 30 декабря 2011

Вы можете создать список lhs элементов следующим образом:

List<string> lhsElements = xele.Elements("lhs")
                               .Select(el => el.Attribute("id").Value)
                               .ToList();

Выбирает все элементы lhs, которые являются потомками xele, а затем выбирает значение их атрибута 'id'. Я оставлю это вам, чтобы решить, как объединить это с вашим кодом.

...