Как преобразовать SAP B1 Datatable в System.Data.Datatble с помощью XML

Я пытаюсь преобразовать 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 для преобразования SAP B1 Datatable XML в System.Data.Datatable XML

Жду твоего ответа.

Было бы здорово, если бы вы могли предоставить минимальный воспроизводимый пример

Jazb 20.12.2018 06:56

Я немного прочитал, и похоже, что SAP использует соединение ODBC с базой данных и использует стандартные методы db.context в VS для извлечения данных. Я не уверен, зачем вам нужен xml, если данные не хранились в базе данных в формате xml. Db.context состоит из таблиц базы данных в виде списка классов. Итак, если у вас есть таблица в базе данных Имя таблицы со столбцами First и Last, у вас будет List <db.context.Name> в качестве строк таблицы. Таким образом, извлечение будет иметь вид var results = db.context.Name.Select (x => new {First = x.First, Last = x.Last}). ToList ();

jdweng 20.12.2018 11:25

Под «SAP B1 datatable» вы подразумеваете объект набора записей DI-API?

Daz 21.12.2018 11:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
1 676
1

Ответы 1

Я создал метод, который примет SAP DataTable (как 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;
}

Другие вопросы по теме