C# LINQ到XML-按父元素分组
这是我第一次使用LINQ到XML,请耐心等待。我正在解析Web服务生成的XML文件,以便将值插入SQL Server。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
...
<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报告系统生成的机器。我知道它必须简单!谢谢你这么快的回复。