2012-05-08 76 views
0

這是我第一次使用LINQ to XML的經驗,請耐心等待。我正在解析一個Web Services生成的XML文件,以便插入到SQL Server中。 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#類一旦我開始解析。我想將(連接?)一行中的所有值分組到一個對象中,如果可能的話,分隔字符串和逗號。我知道我可以通過將所有值拉入列表中,然後遍歷它們並將每個X分組爲一個「行」對象,其中X是每行中值的數量,但感覺應該有更多LINQ-y的方式來做到這一點。是否有LINQ查詢將爲每一行,將所有值分組爲單個對象?

謝謝。

+1

這真是醜陋的XML!顯然是由逗號分隔的列表創建的人員,否則這些值應該有名字! –

+0

是的,它是由我們的人力資源系統的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