У меня есть ниже XML в файле описаний данных:Получить Имя атрибута, используя позицию из XElement
<PQTemplate documentID="CSTrlsEN" documentType="TransList" templateID="001"
templateType="Customer Copy"
templateName="C:\CPS\_templates\Mini-Statements\CSTrlsEN.doc">
<field pos="5" name="YPTME" descr="Time" />
<field pos="6" name="YPDTE" descr="Action Date" />
<field pos="7" name="YPBRNO" descr="Branch Number" />
<field pos="8" name="YPBNA" descr="Branch Name" />
<field pos="9" name="YPTID" descr="Teller ID" />
<field pos="10" name="YPISN" descr="Teller Sequence" />
<field pos="11" name="YPREF" descr="Customer Reference" />
<field pos="12" name="YPCUS" descr="Customer Name" />
<field pos="13" name="YPEAN" descr="Account Number" />
<field pos="14" name="YPATY" descr="Account Type" />
<field pos="15" name="YPCUR" descr="Currency" />
<field pos="16" name="YPBAL" descr="Available Balance" />
</PQTemplate>
Я хочу построить таблицу данных путем добавления столбцов с именем для имя атрибута в поле подэлементы, но у меня возникли проблемы с извлечением информации с помощью LINQ:
Вот код, который я пытаюсь написать, я хочу, чтобы добавить имя столбца с именами атрибутов, где атрибут поз является> 5 , поэтому пихта й столбец будет YPTME, второй столбец будет YPDTE, и так далее до 12-го и последнего столбца добавленным будет YPBAL ...
var mapInfo = from nm in XElement.Elements("PQTemplate").Elements("field")
where (string)nm.Attribute("documentID") == sRequests[0]
select nm;
if (mapInfo != null)
{
for (int iCol = 5; iCol < mapInfo.Count(); iCol++)
{
// there should be twelve
string colName = mapInfo.Attributes(iCol);
dt[0].Columns.Add(new DataColumn(colName, typeof(System.String)));
}
}
Я, кажется не в состоянии сделать это правильно, как я могу это сделать и где я буду неправильно с линией string colName = mapInfo.Attributes(iCol);
EDIT:
Я также попытался это, но опять же, не могу показаться, что ар сгибают индексирование в for..next
цикле:
var mapInfo = from nm in XElement.Elements("PQTemplate").Elements("field")
where (string)nm.Attribute("documentID") == sRequests[0] && Convert.ToInt32(nm.Attribute("pos").ToString())>=5
orderby Convert.ToInt32(nm.Attribute("pos").ToString())
select nm;
if (mapInfo != null)
{
for (int iDx=5; iDx<mapInfo.Count(); iDx++)
{
string colName=mapInfo[iDx];
dt[0].Columns.Add(new DataColumn(colName, typeof(System.String)));
}
}
Благодаря
Спасибо, но мне нужно, чтобы добавить их к DataTable в порядке 'pos' атрибута ... –
обновил решение! –