【发布时间】:2014-04-17 12:38:00
【问题描述】:
我对 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>
我正在尝试以两个为一组(即(2014-04-10,4))获取具有属性 Value 的 ItemData,以便稍后使用第一个示例。这就是我所做的,我很确定它不是很有成效。
var doc = XDocument.Load(XmlReader.Create(streaming));
XNamespace nsSys = "http://www.cdisc.org/ns/odm/v1.3";
var items = from i in doc.Descendants(nsSys + "ItemData")
select new
{
//item = (string)i.Attribute("ItemOID"),
val = (string)i.Attribute("Value")
};
var oddCategories = items.ToList().Where((c, i) => i % 2 == 0);
var evenCategories = items.ToList().Where((c, i) => i % 2 != 0);
//Put it into a datatable
DataTable modDt = new DataTable();
modDt.Columns.Add(new DataColumn("Date", typeof(int))); //odd values
modDt.Columns.Add(new DataColumn("Type", typeof(int))); //even values
我将 xml 输出(项目数据)放入 1x6 列表中。然后将其拆分为奇数,然后将其放回要使用的数据表。我一直不知道如何将其放入数据表中。我还想将日期格式从 2014-04-01 更改为 04/01/14 (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);
}
然后将其放回数据表以供稍后读取。尽管由于只读问题,这不允许我添加 \ 。非常感谢您的建议和帮助。干杯。
【问题讨论】: