2012-05-08 54 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