2013-05-27 141 views
0

我無法從xml中獲取屬性值。我正在使用Google自定義搜索API。從cml中檢索xml屬性值#

var results = 
        (from r in res.Descendants("R") 
        where r.Element("T") != null 
        select new GoogleSearchResultItem(
         new PageSummary 
         { 
          Title = r.Element("T").Value, 
          LinkURL = r.Element("U").Value, 
          Description = r.Element("S").Value         
         })); 

它適用於T,U,S元素,但是當我嘗試獲取屬性programid時,我得到null。

這裏是XML:

<R N="1"> 
<U> 
    Link to somepage 
</U>  
<T> 
    <b>Title</b> 
</T>  
<S> 
    Summary 
</S> 
<LANG>sv</LANG> 
<Label>_cse_1h5bojdlb5c</Label> 
<PageMap> 
    <DataObject type="metatags">   
     <Attribute name="displaydate" value="20121028"/> 
     <Attribute name="programid" value="2519"/> 
     <Attribute name="formatid" value="116"/> 
    </DataObject> 
</PageMap> 
+0

您可以顯示T,U或XML元素小號? – sexta13

+0

我已更新XML – n3tx

+0

是的,T,U和S工作正常,即時只是使用r.Element(「T」)來獲得標題。也許是因爲它在R的根中。但問題是要獲得PageMap> DataObject的屬性programid – n3tx

回答

1

我在這裏使用匿名類型,但什麼能阻止你強烈鍵入它。

var res = XDocument.Load(@"c:\temp\test.xml"); 
var results = res.Descendants("R").Where(r => r.Element("T") != null) 
       .Select(r => new 
        { 
         Title = r.Element("T").Value, 
         LinkUrl = r.Element("U").Value, 
         Description = r.Element("S").Value, 
         ProgramId = r.Descendants("Attribute").Where(x=>x.Attribute("name").Value == "programid").Select(x=>x.Attribute("value").Value).FirstOrDefault() 
        }).ToList(); 

這是強類型

var res = XDocument.Load(@"c:\temp\test.xml"); 
var results = res.Descendants("R").Where(r => r.Element("T") != null) 
       .Select(r => new GoogleSearchResultItem 
       { 
        PageSummary = new PageSummary 
         { 
          Title = r.Element("T").Value, 
          LinkUrl = r.Element("U").Value, 
          Description = r.Element("S").Value, 
          ProgramId = r.Descendants("Attribute").Where(x => x.Attribute("name").Value == "programid").Select(x => x.Attribute("value").Value).FirstOrDefault() 
         } 
       });