Нужна помощь в чтении XML с помощью LINQ - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь связать содержимое следующего файла с помощью LINQ, но у меня проблемы с синтаксисом.

<metadefinition>
  <page>
    <name>home</name>
    <metas>
      <meta>
        <metaname>
          title
        </metaname>
        <metavalue>
          Welcome Home
        </metavalue>
      </meta>

      <meta>
        <metaname>
          description
        </metaname>
        <metavalue>
          Welcome Home Description
        </metavalue>
      </meta>

    </metas>
  </page>

  <page>
    <name>results</name>
    <metas>
      <meta>
        <metaname>
          title
        </metaname>
        <metavalue>
          Welcome to Results
        </metavalue>
      </meta>
    </metas>
  </page>
</metadefinition>

Мой запрос выглядит следующим образом, но, как вы видите, он не получает тега metas. Как мне это сделать?

 var pages = from p in xmlDoc.Descendants(XName.Get("page"))
                            where p.Element("name").Value == pageName
                            select new MetaPage
                            {
                                Name = p.Element("name").Value,
                                MetaTags = p.Elements("metas").Select(m => new Tag { MetaName = m.Element("metaname").Value.ToString(),
                                                                                     MetaValue = m.Element("metacontent").Value.ToString()
                                }).ToList()
                            };

1 Ответ

1 голос
/ 22 февраля 2012

Если <metadefinition> является корневым элементом, то нет необходимости перебирать все потомки документа, это слишком неэффективно.

var pages = from p in xmlDoc.Root.Elements("page")
            where p.Element("name").Value == pageName
            select new MetaPage {
                Name = p.Element("name").Value,
                MetaTags = p.Element("metas").Elements("meta").Select(m=>new Tag{
                    MetaName = m.Element("metaname").Value.ToString(),
                    MetaValue = m.Element("metavalue").Value.ToString()
                }).ToList()
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...