2012-02-22 53 views
0

我試圖使用LINQ綁定以下文件的內容,但遇到語法問題。需要使用LINQ讀取XML的幫助

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

這有點不清楚你到底想要完成什麼。 「*缺少metas標籤的檢索*」是什麼意思? – 2012-02-22 08:56:12

回答

1

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