C# LINQ到XML-按父元素分组

C# LINQ到XML-按父元素分组,c#,web-services,linq-to-xml,C#,Web Services,Linq To Xml,这是我第一次使用LINQ到XML,请耐心等待。我正在解析Web服务生成的XML文件,以便将值插入SQL Server。XML数据如下所示: ... <row> <value>912EOE01L0K0</value> <value>4369 </value> <value>PTO </value> <value>PTO0

这是我第一次使用LINQ到XML,请耐心等待。我正在解析Web服务生成的XML文件,以便将值插入SQL Server。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>
...
。。。
912EOE01L0K0
4369
动力输出轴
PTO03
3天PTO
1.
0
0
1.
0
0
7.36
0
0
912EOE01L0K0
4369
生病的
SCK07
7天病假
2.34
0
0
2.34
0
0
35.979999
0
0
...
进行解析的C#类需要是动态的,以处理每行中可变数量的行和值,尽管我知道一旦开始解析,每行中会有多少个值。我想将一行中的所有值分组(pivot?)为一个对象,如果可能,字符串和逗号分隔。我知道我可以通过将所有的值拉入一个列表,然后对它们进行迭代,并将每个X分组到一个“行”对象中,其中X是每行中的值的数量,但感觉应该有一种更LINQ-y的方法来实现这一点。是否有一个LINQ查询可以为每一行将所有值分组到一个对象中


谢谢。

这是Linq到Xml的一个很好的应用程序。将XML加载到XDocument后,可以编写以下内容:

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字符串。

这真是难看的xml!创建它的人显然是从逗号分隔的列表中创建的,否则这些值应该有名称!是的,这是人力资源系统的Cognos BI报告系统生成的机器。我知道它必须简单!谢谢你这么快的回复。