2016-11-14 75 views
2

我正在學習LINQ,我被困在如何去打印出部門名稱和經理姓名分開。LINQ和xml數據

我有下面的代碼打印出:

Department name: Account 
       Joe 
Department name: Sales 
       Jack 
Department name: Pre-Sales 
       Sam 
Department name: Marketing 
       Jim 

我怎麼能單獨的,所以,它只會在該行打印部門名稱。

string myXML = @"<Departments> 
     <Department>Account 
     <Manager>Joe</Manager> 
     </Department> 
     <Department>Sales 
     <Manager>Jack</Manager> 
     </Department> 
     <Department>Pre-Sales 
     <Manager>Sam</Manager> 
     </Department> 
     <Department>Marketing 
     <Manager>Jim</Manager> 
     </Department> 
     </Departments>"; 

XDocument xdoc = new XDocument(); 
xdoc = XDocument.Parse(myXML); 

var DeptResult = xdoc.Element("Departments").Descendants("Department"); 
var ManagerResult = xdoc.Element("Departments").Descendants("Manager"); 

foreach (XElement item in DeptResult) 
{ 
    Console.WriteLine("Department Name - " + item.Value); 
} 
+0

對於每個部門都有一個經理? – octavioccl

+0

是的。那是正確的。 – psj01

回答

1

你可以做到這一點使用Zip擴展方法:

var departments=xdoc.Descendants("Department"); 
var managers=xdoc.Descendants("Manager"); 
foreach(var s in departments.Zip(managers, (d,m)=>"Department name: "+ 
                d.Value+"@\n"+ 
                "Manager name: "+ m.Value)) 
    Console.WriteLine(s); 

現在,就我記得的LINQ to XML返回同一順序是你的文檔中的元素和你說的存在相同數量的部門和經理,因此,您也可以重複其中一個結果並使用索引:

var departments=xdoc.Descendants("Department").ToList(); 
var managers=xdoc.Descendants("Manager").ToList(); 
for(int i=0;i<departments.Count;i++) 
{ 
    Console.WriteLine("Department Name - " + departments[i].Value); 
    Console.WriteLine("Manager Name - " + managers[i].Value); 
} 
+0

這給出了錯誤:\t名稱'm'在當前上下文中不存在 – psj01

+0

我修復了這個問題,現在再次閱讀您的問題,您希望經理名稱在不同的行中? – octavioccl

+0

它打印如下:部門名稱:帳戶Joe經理姓名:Joe ...等等。需要從d.value中刪除經理姓名.. – psj01