【问题标题】:Need help reading XML using LINQ需要帮助使用 LINQ 读取 XML
【发布时间】:2012-02-22 17:13:43
【问题描述】:

我正在尝试使用 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()
                            };

【问题讨论】:

  • 有点不清楚你到底想在这里完成什么。 “缺少对元标记的检索”是什么意思?

标签: linq linq-to-xml


【解决方案1】:

如果&lt;metadefinition&gt;是根元素,那么就不需要遍历文档的所有后代,效率太低了。

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()
            };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多