2012-06-19 157 views
0

我有下面的XML:選擇父元素的唯一屬性

<data name="zzz_AbsenceReportDR" time="2012-06-19 13:36:40Z" xmlns=""> 
    <row conf="88945498" date="6/19/2012" employee_identifier="mickeymouse" school_name="City Academy" substitute_identifier="" start_time_absence="7:15:00 AM" end_time_absence="3:00:00 PM" filled="No" school_external_id="309" school_dbkey="83235" notes_to_administrator="My lesson plans are in my mailbox." notes_only_for_administrators="" last_update="6/18/2012 6:00:24 PM" notes="We have PE on Monday." last_approval_action="" created="6/18/2012" cancelled="No" absence_last_update="6/18/2012 6:00:24 PM" absence_reason="Personal" approval_status="Unapproved" approved_by="" needs_approval="Yes" /> 
    <row conf="88946034" date="6/19/2012" employee_identifier="AntwanTeacher" school_name="College Academy" substitute_identifier="" start_time_absence="7:30:00 AM" end_time_absence="3:30:00 PM" filled="No" school_external_id="213" school_dbkey="83244" notes_to_administrator="" notes_only_for_administrators="" last_update="6/18/2012 7:00:24 PM" notes="Lesson Plan on Desk" last_approval_action="" created="6/18/2012" cancelled="No" absence_last_update="6/18/2012 7:00:24 PM" absence_reason="Personal" approval_status="Unapproved"approved_by="" needs_approval="Yes" /> 
    <row conf="88946035" date="6/19/2012" employee_identifier="vinnieteacherman" school_name="Oakland Academy" substitute_identifier="" start_time_absence="7:35:00 AM" end_time_absence="3:10:00 PM"filled="No" school_external_id="207" school_dbkey="83242" notes_to_administrator="" notes_only_for_administrators="" last_update="6/18/2012 7:00:24 PM" notes="" last_approval_action="" created="6/18/2012" cancelled="No" absence_last_update="6/18/2012 7:00:24 PM" absence_reason="Personal" approval_status="Unapproved" approved_by="" needs_approval="Yes" /> 

行被動態生成的和(在將來的某一時刻)可以具有所謂的「名稱」的屬性。什麼是LINQ表達式只從數據(父)元素中選擇name屬性的值?我使用下面的代碼,但擔心它也會返回名爲「name」的行屬性。

var xElems = from x in xmlDoc.Descendants() 
      where x.Name.LocalName == "data" 
      select x; 

foreach (var xElem in xElems) 
{ 
    Console.WriteLine(xElem.Attribute("name")); 
} 

回答

1
var elems = xmlDoc.Descendants("data") 
        .Select(e => (string)e.Attribute("name")) 
        .ToList(); 

如果只有data元素總是在文件結構的頂部,你可以用Elements取代Descendants

1
var r = from d in doc.Elements("data") 
     let name = (string)d.Attribute("name") 
     select name;