2013-02-28 54 views
2

我想弄清楚獲取兩個元素(城市&狀態)值的最佳方法,以便稍後使用它們。我正在循環瀏覽網站下的每個網站。每次我經歷它時,我需要拉動城市和州,然後將它們保存爲一個字符串。我有它的工作(種類),但我認爲我正在做這個錯誤的方式。如何從XElement中檢索元素

XML:

<Sites> 
    <Site> 
    <City>Miami</City> 
    <State>FL</State> 
    <Machines> 
     <Machine> 
     <MachineName>1950-16-CORE</MachineName> 
     <ServerRoleType>CoreServer</ServerRoleType> 
     <ClientRoles>Core</ClientRoles> 
     <Features> 
      <Feature> 
      <FeatureName>CoreProcess</FeatureName> 
      <FeatureEnabled>true</FeatureEnabled> 
      </Feature> 
      <Feature> 
      <FeatureName>Antivirus</FeatureName> 
      <FeatureEnabled>true</FeatureEnabled> 
      </Feature> 
     </Machine> 
     <Machine> 
     <MachineName>1950-16-COREX</MachineName> 
     <ServerRoleType>CoreExpansionServer</ServerRoleType> 
     <ClientRoles>CoreEx</ClientRoles> 
     <Features> 
      <Feature> 

代碼:

foreach (XElement xEleSite in siteRows) 
{ 
    IEnumerable<XElement> siteLists = from siteList in xEleSite.Descendants("Site") 
             select siteList; 

    IEnumerable<XElement> siteCity = siteLists.Descendants("City"); 

    foreach (XElement c in siteCity) 
    { 
     string cityElement = c.Value.ToString(); 
    }  
} 

回答

2

考慮這個簡單的例子:

<Sites> 
    <Site> 
    <City>Miami</City> 
    <State>FL</State> 
    <Machines></Machines> 
    </Site> 
    <Site> 
    <City>NY</City> 
    <State>FL</State> 
    <Machines></Machines> 
    </Site> 
</Sites> 

假設xEleSite包含此XML,現在你可以使用Anonymous Types保持信息:

var result = xEleSite.Descendants("Site") 
        .Select(s => new 
        { 
         City = s.Element("City").Value, 
         State = s.Element("State").Value 
        }); 

遍歷它,您可以:

foreach (var i in result) 
{ 
    Console.WriteLine(i.City); 
    Console.WriteLine(i.State); 
    Console.WriteLine(); 
} 

從原來的問題,我想你需要所有的值存儲在XML以後使用它,而OP的代碼只有局部變量在包含它們的最內層循環中。這種方法提供了訪問列表中所有值的機會。

+0

+1用於創建更簡化的示例 – 2013-02-28 05:20:25