C# XML到数据表LINQ

C# XML到数据表LINQ,c#,xml,linq,datatable,C#,Xml,Linq,Datatable,我对Linq和c很陌生,很抱歉我的无知。下面是我的xml <FormData FormOID="F_TABLEOFMODAL_V20" OpenClinica:Version="v2.0" OpenClinica:Status="initial data entry"> <ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="3" TransactionType="Insert"&

我对Linq和c很陌生,很抱歉我的无知。下面是我的xml

<FormData FormOID="F_TABLEOFMODAL_V20" OpenClinica:Version="v2.0" OpenClinica:Status="initial data entry">
    <ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="3" TransactionType="Insert">
        <ItemData ItemOID="I_TABLE_MODAL_DATE_TABLE" Value="2014-04-10" />
        <ItemData ItemOID="I_TABLE_MODAL_TYPE_TABLE" Value="4" />
    </ItemGroupData>
    <ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="1" TransactionType="Insert">
        <ItemData ItemOID="I_TABLE_MODAL_DATE_TABLE" Value="2014-04-01" />
        <ItemData ItemOID="I_TABLE_MODAL_TYPE_TABLE" Value="2" />
    </ItemGroupData>
    <ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="2" TransactionType="Insert">
        <ItemData ItemOID="I_TABLE_MODAL_DATE_TABLE" Value="2014-04-04" />
        <ItemData ItemOID="I_TABLE_MODAL_TYPE_TABLE" Value="1" />
    </ItemGroupData>
</FormData>
我正在将xml项数据导出到1x6列表中。然后将其按奇数和偶数进行拆分,然后将其放回要使用的数据表。我被困在知道如何将其放入数据表中。我还想将日期格式从2014年4月1日更改为2014年1月4日m/D/Y。我正在考虑

var itemlist = items.ToArray();  
var skipped = String.Join(",", itemlist.Select(p => p.ToString()).ToArray());
List<string> result = skipped.Split(',').ToList();

for (int i = 0; i < result.Count; i += 2)
{
    var ccc = result[i].ToCharArray();
    var dd = ccc.Skip(10);
    var ff = dd.Take(8);
    var yr = ff.Take(2);
    var mnth = ff.Skip(3).Take(2);
    var dte = ff.Skip(6).Take(2);
    var sss = ee.Concat(mnth).Concat(dte);

 }
然后将其放回数据表,以便以后读取。尽管由于只读问题,这将不允许我添加\项。非常感谢您的建议和帮助。干杯。

检查此示例:

//loop through <ItemGroupData> to get both date and type value
//from each iteration
var items = from i in doc.Descendants(nsSys + "ItemGroupData")
            select new
            {
                date = (string)i.Element(nsSys + "ItemData").Attribute("Value"),
                type = (string)i.Elements(nsSys + "ItemData").Skip(1).First().Attribute("Value")
            };
DataTable modDt = new DataTable();
modDt.Columns.Add(new DataColumn("Date", typeof(string)));
modDt.Columns.Add(new DataColumn("Type", typeof(int)));

//add LINQ-to-XML query result to DataTable
foreach (var item in items)
{
    //convert item.date string to DateTime  
    //then convert it back to string with different format
    modDt.Rows.Add(DateTime.ParseExact(item.date, "yyyy-MM-dd", CultureInfo.InvariantCulture)
                           .ToString("MM/dd/yyyy"), 
                    int.Parse(item.type);
}

我假设XML格式是一致的,f.e每个总是包含2个元素,每个元素都必须有Value属性。

很棒的示例伴侣…但是这是我的错…忘记提到我在.net3.5…所以type=stringi.ElementnsSys+ItemData.Skip1.First.AttributeValue没有方法Skip and First..干杯..加油,打字。应该是元素…Skip1…,你能再试一次吗?完美..有效..后代.Skip1.首先。。。。只是想知道你是否知道在这种情况下如何将价值交换为mr?LINQ中有方法吗?干杯
//loop through <ItemGroupData> to get both date and type value
//from each iteration
var items = from i in doc.Descendants(nsSys + "ItemGroupData")
            select new
            {
                date = (string)i.Element(nsSys + "ItemData").Attribute("Value"),
                type = (string)i.Elements(nsSys + "ItemData").Skip(1).First().Attribute("Value")
            };
DataTable modDt = new DataTable();
modDt.Columns.Add(new DataColumn("Date", typeof(string)));
modDt.Columns.Add(new DataColumn("Type", typeof(int)));

//add LINQ-to-XML query result to DataTable
foreach (var item in items)
{
    //convert item.date string to DateTime  
    //then convert it back to string with different format
    modDt.Rows.Add(DateTime.ParseExact(item.date, "yyyy-MM-dd", CultureInfo.InvariantCulture)
                           .ToString("MM/dd/yyyy"), 
                    int.Parse(item.type);
}