2016-11-14 9 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); 

を、限り私はXMLにLINQのを覚えているドキュメントにあるのと同じ順序で要素を返し、あなたはそこにあると述べました同じ数の部署やマネージャーがいるため、結果の1つを繰り返してインデックスを使用することもできます。

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

これは次のように表示されます:部門名:Account Joe Manager名:Joe ...など.. d.valueからマネージャー名を削除する必要があります。 – psj01