2012-05-08 14 views
0

これはLINQ to XMLの初めての経験です。私はSQL Serverに挿入する値のWebサービス生成XMLファイルを解析しています。 XMLデータは次のようになります。LINQ to XML - 親要素別グループ

... 
    <row> 
     <value>912EOE01L0K0</value> 
     <value>4369  </value> 
     <value>PTO </value> 
     <value>PTO03 </value> 
     <value>3 Days PTO  </value> 
     <value>1</value> 
     <value>0</value> 
     <value>0</value> 
     <value>1</value> 
     <value>0</value> 
     <value>0</value> 
     <value>7.36</value> 
     <value>0</value> 
     <value>0</value> 
    </row> 
    <row> 
     <value>912EOE01L0K0</value> 
     <value>4369  </value> 
     <value>SICK </value> 
     <value>SCK07 </value> 
     <value>7 Sick Days </value> 
     <value>2.34</value> 
     <value>0</value> 
     <value>0</value> 
     <value>2.34</value> 
     <value>0</value> 
     <value>0</value> 
     <value>35.979999</value> 
     <value>0</value> 
     <value>0</value> 
    </row> 
... 

解析を行っていることは、私はそれぞれの行になりますどのように多くの価値を知っていますが、各列内の行と値の可変数を処理するために動的にする必要がありますC#クラス一度私は解析を開始します。行のすべての値を1つのオブジェクトにグループ化(ピボット?)したい場合は、Stringとカンマで区切ります。私はすべての値をリストに引き込み、それを反復してすべてのXを「行」オブジェクトにグループ化することでこれを行うことができることを知っています。ここでXは各行の値の数ですが、 LINQ-yこれを行う方法。すべての値を単一のオブジェクトにグループ化するLINQクエリは各行に適用されますか?

ありがとうございました。

+1

これは本当に醜いxmlです!その作成者は、カンマで区切られたリストから作成しました。そうでない場合は、名前に名前が必要です。 –

+0

ええ、それは当社のHRシステムのCognos BIレポートシステムによって生成されたマシンです。 – davejroth

答えて

0

これはLinq-to-Xmlの優れたアプリケーションです。あなたはXDocumentにロードされたXMLを持ったら、あなたはこれを書くことができます。

XDocument MyXDoc; 
// TODO, load or parse MyXDoc 

string[] CsvList = MyXDoc.Root.Elements("row") 
    .Select(row => 
     String.Join(", ", row.Elements("value").Select(val => (string)val).ToArray()) 
    ) 
    .ToArray(); 

これはあなたのCSV文字列として表された値と、各行の配列を与えます。

+0

私はそれが簡単でなければならないことを知っていました!このような迅速な対応に感謝します。 – davejroth