Как создать DataTable каждый раз когда меняется значение атрибута в xml файле или как мне посчитать количество - C#
Формулировка задачи:
Вот пример для одного DataTable, а мне надо сделать List<DataTable> - ов, когда меняется значение атрибута path. А пока у меня все точки point записывает в одну таблицу DataTable.
Листинг программы
- private DataTable TablePoint()
- {
- //создаём таблицу
- DataTable dtPoint = new DataTable();
- //создаём три колонки
- DataColumn x = new DataColumn("x", typeof(Double));
- DataColumn y = new DataColumn("y", typeof(Double));
- //добавляем колонки в таблицу
- dtPoint.Columns.Add(x);
- dtPoint.Columns.Add(y);
- return dtPoint;
- }
- listDt.Add(TablePoint());
- DataRow newRowListDt = null;
- foreach (XElement elm in xDoc.Descendants("point"))
- {
- newRowListDt = listDt[0].NewRow();
- if (elm.Element("x") != null)
- {
- newRowListDt["x"] = double.Parse(elm.Element("x").Value);
- }
- if (elm.Element("y") != null)
- {
- newRowListDt["y"] = double.Parse(elm.Element("y").Value);
- }
- listDt[0].Rows.Add(newRowListDt);
- }
Листинг программы
- <?xml version="1.0"?>
- <report>
- <file type="cor" path="\external\density.cor">
- <surface>
- <a0>94,542439249332958</a0>
- <a1>-0,023660792953356</a1>
- <a2>-0,000247805755783</a2>
- <a11>0,000132167800465</a11>
- <a22>0,000029759193435</a22>
- <a12>-0,000000500686483</a12>
- <p>1,000000000000000</p>
- </surface>
- <surface>
- <a0>-3505,348808946265308</a0>
- <a1>3,842819162960808</a1>
- <a2>-0,253670976884668</a2>
- <a11>0,000000000000000</a11>
- <a22>0,000000000000000</a22>
- <a12>0,000000000000000</a12>
- <p>3,000000000000000</p>
- </surface>
- <surface>
- <a0>0,000000000000000</a0>
- <a1>0,000000000000000</a1>
- <a2>0,000000000000000</a2>
- <a11>-0,000577529221804</a11>
- <a22>0,000000234379777</a22>
- <a12>0,000000000000000</a12>
- <p>6,000000000000000</p>
- </surface>
- <surface>
- <a0>-20,620740405400667</a0>
- <a1>-0,008028079212385</a1>
- <a2>0,008291612967982</a2>
- <a11>0,000000000000000</a11>
- <a22>0,000000000000000</a22>
- <a12>0,000000000000000</a12>
- <p>7,000000000000000</p>
- </surface>
- <surface>
- <a0>1000,000000000000000</a0>
- <a1>0,000000000000000</a1>
- <a2>100,000000000000000</a2>
- <a11>0,100000000000000</a11>
- <a22>10,000000000000000</a22>
- <a12>0,100000000000000</a12>
- <p>5,000000000000000</p>
- </surface>
- </file>
- <file type="tar" path="\external\density.tar">
- <point>
- <x>1,001120947429713</x>
- <y>1,000000000000000</y>
- </point>
- <point>
- <x>1,007114858291929</x>
- <y>1,125000000000000</y>
- </point>
- <point>
- <x>1,013565787648818</x>
- <y>1,162999987602234</y>
- </point>
- <point>
- <x>1,016829740454785</x>
- <y>1,200000047683716</y>
- </point>
- <point>
- <x>1,021145746087924</x>
- <y>1,246999979019165</y>
- </point>
- <point>
- <x>1,025412597748493</x>
- <y>1,297000050544739</y>
- </point>
- <point>
- <x>1,031066554629070</x>
- <y>1,335000038146973</y>
- </point>
- <point>
- <x>1,034596220239890</x>
- <y>1,409999966621399</y>
- </point>
- <point>
- <x>1,041863525898852</x>
- <y>1,457999944686890</y>
- </point>
- <point>
- <x>1,047088434886263</x>
- <y>1,480000019073486</y>
- </point>
- <point>
- <x>1,048661341829451</x>
- <y>1,577999949455261</y>
- </point>
- <point>
- <x>1,058699113123393</x>
- <y>1,631999969482422</y>
- </point>
- <point>
- <x>1,064286037385592</x>
- <y>1,669999957084656</y>
- </point>
- <point>
- <x>1,067707114640065</x>
- <y>1,715000033378601</y>
- </point>
- <point>
- <x>1,072759073112358</x>
- <y>1,789999961853027</y>
- </point>
- <point>
- <x>1,079377092261531</x>
- <y>1,809000015258789</y>
- </point>
- <point>
- <x>1,080858893444794</x>
- <y>1,871000051498413</y>
- </point>
- <point>
- <x>1,086807401829741</x>
- <y>1,906000018119812</y>
- </point>
- </file>
- <file type="tar" path="\internal\rgr.tar">
- <point>
- <x>1,000000000000089</x>
- <y>96,203607227994326</y>
- </point>
- <point>
- <x>1,121647476309132</x>
- <y>64,153563926231982</y>
- </point>
- <point>
- <x>1,162617101433475</x>
- <y>57,084855874282766</y>
- </point>
- <point>
- <x>1,199997240030699</x>
- <y>71,170880906510774</y>
- </point>
- <point>
- <x>1,247032182620398</x>
- <y>47,598501400471378</y>
- </point>
- <point>
- <x>1,296018213060599</x>
- <y>45,497866121940660</y>
- </point>
- <point>
- <x>1,335486270278312</x>
- <y>43,918464200360177</y>
- </point>
- <point>
- <x>1,409007225812303</x>
- <y>39,454249422180510</y>
- </point>
- <point>
- <x>1,456475520177888</x>
- <y>35,629505963969677</y>
- </point>
- <point>
- <x>1,483019308050488</x>
- <y>34,892626423095862</y>
- </point>
- <point>
- <x>1,574686329729077</x>
- <y>35,219357108306212</y>
- </point>
- <point>
- <x>1,632079496130972</x>
- <y>27,344551293302175</y>
- </point>
- <point>
- <x>1,670156500480126</x>
- <y>25,494236532186278</y>
- </point>
- <point>
- <x>1,715145912653980</x>
- <y>24,320747575496625</y>
- </point>
- <point>
- <x>1,788382750490845</x>
- <y>22,830541923409328</y>
- </point>
- <point>
- <x>1,813709692183452</x>
- <y>21,144235339306761</y>
- </point>
- <point>
- <x>1,867528548449862</x>
- <y>22,706206620071953</y>
- </point>
- <point>
- <x>1,904989930225966</x>
- <y>20,091290930248761</y>
- </point>
- </file>
- <file type="tar" path="\external\rotate.tar">
- <point>
- <x>0,473827699164345</x>
- <y>0,000000000000001</y>
- </point>
- <point>
- <x>62,228428113975781</x>
- <y>-15,893077863579318</y>
- </point>
- <point>
- <x>113,650635808823651</x>
- <y>-15,791064565547854</y>
- </point>
- <point>
- <x>155,828331084435717</x>
- <y>-16,592300376397727</y>
- </point>
- <point>
- <x>205,995168819120522</x>
- <y>-17,666597648900968</y>
- </point>
- <point>
- <x>252,531471681222712</x>
- <y>-17,408675790553470</y>
- </point>
- <point>
- <x>309,677993283783906</x>
- <y>-19,025042962204655</y>
- </point>
- <point>
- <x>350,834621990577716</x>
- <y>-20,949042633494532</y>
- </point>
- </file>
- <file type="tar" path="\external\coriol.tar">
- <point>
- <x>100,000000000000000</x>
- <y>10,000000000000000</y>
- </point>
- </file>
- </report>
Решение задачи: «Как создать DataTable каждый раз когда меняется значение атрибута в xml файле или как мне посчитать количество»
textual
Листинг программы
- public void ReadXml(string pathXmlFile)
- {
- List<DataTable> listDt = new List<DataTable>();
- XDocument xDoc = XDocument.Load(pathXmlFile);
- foreach (XElement el in xDoc.Root.Elements())
- {
- XAttribute pathAttr = el.Attribute("path");
- if (pathAttr == null || pathAttr.Value == @"\external\density.cor") continue;
- if (el.Element("surface") != null)
- {
- listDt.Add(ReadSurfaceTable(el));
- }
- else if (el.Element("point") != null)
- {
- listDt.Add(ReadPointTable(el));
- }
- }
- listDt.Dump();
- }
- DataTable ReadSurfaceTable(XElement el)
- {
- DataTable table = new DataTable();
- table.Columns.Add(new DataColumn("a0", typeof(Double)));
- table.Columns.Add(new DataColumn("a1", typeof(Double)));
- table.Columns.Add(new DataColumn("a2", typeof(Double)));
- table.Columns.Add(new DataColumn("a11", typeof(Double)));
- table.Columns.Add(new DataColumn("a22", typeof(Double)));
- table.Columns.Add(new DataColumn("a12", typeof(Double)));
- //table.Columns.Add(new DataColumn("p", typeof(Double)));
- foreach (XElement childEl in el.Elements())
- {
- DataRow row = table.NewRow();
- row["a0"] = double.Parse(childEl.Element("a0").Value);
- row["a1"] = double.Parse(childEl.Element("a1").Value);
- row["a2"] = double.Parse(childEl.Element("a2").Value);
- row["a11"] = double.Parse(childEl.Element("a11").Value);
- row["a22"] = double.Parse(childEl.Element("a22").Value);
- row["a12"] = double.Parse(childEl.Element("a12").Value);
- //row["p"] = double.Parse(childEl.Element("p").Value);
- table.Rows.Add(row);
- }
- return table;
- }
- DataTable ReadPointTable(XElement el)
- {
- DataTable table = new DataTable();
- table.Columns.Add(new DataColumn("x", typeof(Double)));
- table.Columns.Add(new DataColumn("y", typeof(Double)));
- foreach (XElement childEl in el.Elements())
- {
- DataRow row = table.NewRow();
- row["x"] = double.Parse(childEl.Element("x").Value);
- row["y"] = double.Parse(childEl.Element("y").Value);
- table.Rows.Add(row);
- }
- return table;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д