C# XML到数据表LINQ
我对Linq和c很陌生,很抱歉我的无知。下面是我的xmlC# 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"&
<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);
}