XDocument - справка по выражению - PullRequest
2 голосов
/ 11 июня 2011

Я пытаюсь ознакомиться с использованием XDocument API для анализа XML с использованием лямбда-синтаксиса.

Я хотел бы создать список IEnumerable из Product на основе следующей XML-структуры. Я знаю, как получить все узлы product, но я хочу получить каждый из атрибутов name узлов продукта, а затем выбрать каждый узел item в узле "product" и проанализировать его значения.

Итак, я хочу взять этот XML:

<products>
  <product name="Prod1">
    <item hwid="abk9184">
      <href>Prod1/abk9184_en-us/abk9184.html</href>
      <localization>en-us</localization>
      <build.start>2011-06-08 22:02 PM</build.start>
      <build.icp>9.0.192.32</build.icp>
    </item>
    <item hwid="abk9185">
      <href>Prod1/abk9185_en-us/abk9185.html</href>
      <localization>en-us</localization>
      <build.start>2011-06-08 22:03 PM</build.start>
      <build.icp>9.0.192.32</build.icp>
    </item>
  </product>
  <product name="Prod2">
    <item hwid="aa6410">
      <href>Prod2/aa6410_en-us/aa6410.html</href>
      <localization>en-us</localization>
      <build.start>2011-06-08 22:04 PM</build.start>
      <build.icp>9.0.192.32</build.icp>
    </item>
  </product>
</products>

И из этого я хотел бы получить список этих:

public class Product
{
    public string Name { get; set; }
    public string Hwid { get; set; }
    public string Href { get; set; }
    public string Localization { get; set; }
    public DateTime BuildDateTime { get; set; }
    public string IcpBuildVersion { get; set; }
}

Так что, хотя у меня есть 2 узла продукта, в итоге я получу множество экземпляров каждого продукта. Я хотел бы узнать, как это сделать, используя XDocument и синтаксис лямбда-выражений. Может кто-нибудь показать мне путь?

IEnumerable<Product> products = xDocument.Decendants("product")
                                .Select(e => new Product { Name = e.Name })

Но подумайте, что здесь должны быть какие-то циклы, чтобы получить каждый элемент от каждого продукта.

1 Ответ

1 голос
/ 11 июня 2011
var products = document.Descendants("item")
    .Select(arg => 
        new Product
        {
            Name = arg.Parent.Attribute("name").Value,
            Hwid = arg.Attribute("hwid").Value,
            Href = arg.Element("href").Value,
            Localization = arg.Element("localization").Value,
            BuildDateTime = DateTime.Parse(arg.Element("build.start").Value),
            IcpBuildVersion = arg.Element("build.icp").Value
        })
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...