0

这是我第一次使用 LINQ to 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>
...

进行解析的 C# 类需要是动态的,以处理每行中可变数量的行和值,尽管我确实知道一旦开始解析,每行中将有多少值。我想将一行中的所有值分组(透视?)到一个对象中,如果可能的话,字符串和逗号分隔。我知道我可以通过将所有值拉到一个列表中来做到这一点,然后遍历它们并将每个 X 分组到一个“行”对象中,其中 X 是每行中的值的数量,但感觉应该有更多LINQ-y 的方式来做到这一点。是否有针对每一行的 LINQ 查询,将所有值分组到一个对象中?

谢谢。

4

1 回答 1

0

这是一个很棒的 Linq-to-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();

This will give you an array of each row with the values represented as a CSV string.

于 2012-05-08T00:17:54.960 回答