Как преобразовать SAP B1 Datatable в System.Data.Datatble, используя XML - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь преобразовать SAP B1 Datatable в System.Data.Datatable, используя XML.

Я пытался преобразовать его вручную, строка за строкой, но это занимает слишком много времени, так как данные очень большие.

Затем я пытаюсь получить XML из SAP B1 с данными , используя DataTable.SerializeAsXML метод данных SAP и затем загружая System.Data.Datatable используя метод dt.ReadXml , но он выдает ошибку.

Я прочитал на другом форуме, что XML SAP B1 Datatable и System.Data.Datatable отличается и требует преобразования с использованием XSLT.

Можете ли вы предложить какой-либо метод и инструменты, чтобы я мог сгенерировать файл XSLT для преобразования XML-данных SAP B1 в System.Data.Datatable XML

В ожидании вашего ответа.

1 Ответ

0 голосов
/ 29 апреля 2019

Я создал метод, который возьмет таблицу данных SAP (в виде xml) и запишет ее в System.Data.DataTable.

Я не помню, дает ли она правильные типы данных или все простовыходит в виде строки.

Вот гист .

public DataTable SapDataTableToDotNetDataTable(string pathToXmlFile)
{
  var DT = new DataTable();

  var XMLstream = new System.IO.FileStream(pathToXmlFile, FileMode.Open);

  var XDoc = System.Xml.Linq.XDocument.Load(XMLstream);

  var Columns = XDoc.Element("DataTable").Element("Columns").Elements("Column");

  foreach (var Column in Columns)
  {
    DT.Columns.Add(Column.Attribute("Uid").Value);
  }

  var Rows = XDoc.Element("DataTable").Element("Rows").Elements("Row");

  var Names = new List<string>();
  foreach (var Row in Rows)
  {
    var DTRow = DT.NewRow();

    var Cells = Row.Element("Cells").Elements("Cell");
    foreach (var Cell in Cells)
    {
      var ColName = Cell.Element("ColumnUid").Value;
      var ColValue = Cell.Element("Value").Value;
      DTRow[ColName] = ColValue;
    }

    DT.Rows.Add(DTRow);
  }

  return DT;
}
...