Как преобразовать XML в набор записей и наоборот в ASP.NET Core? - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю над проектом, который все еще использует язык Visual FoxPro для манипулирования данными в некоторых случаях.Мы использовали для преобразования DataTables в RecordSet в обоих направлениях.Но из-за необходимых изменений возникли новые требования.Итак, теперь я пытаюсь найти какое-то новое решение, как перенести XML в RecordSet и наоборот?

Я все еще младший разработчик, когда дело доходит до C # и asp.net.

Я нашел так много возможных решений, написанных на старых платформах или на VB, но ничего не работает.Вот небольшой пример, который я не могу реализовать в C # с новейшими фреймворками и базовой технологией.

/// <summary>
/// Convert XML to recordset
/// </summary>
/// <param name="sXML"></param>
/// <returns>Recordset</returns>
public static Recordset recordsetFromXML(string sXML)
{
    if (string.IsNullOrEmpty(sXML))
    {
        // Nothing to convert
        return null;
    }

    // Open an ADO Stream
    var oStream = new Stream();
    oStream.Open(Missing.Value, ConnectModeEnum.adModeUnknown,
                 StreamOpenOptionsEnum.adOpenStreamUnspecified,
                 "", "");

    // Load the XML string into stream
    oStream.WriteText(sXML, StreamWriteEnum.adWriteChar);
    oStream.Position = 0;

    // Create empty recordset
    var oRecordset = new Recordset();

    // Read the XML stream
    oRecordset.Open(oStream, Missing.Value,
                    CursorTypeEnum.adOpenUnspecified,
                    LockTypeEnum.adLockUnspecified, 0);
    oStream.Close();

    //Return the recordset
    return oRecordset;
}

/// <summary>
/// Convert recordset to XML
/// </summary>
/// <param name="oRecordset"></param>
/// <returns>String</returns>
public static string recordsetToXML(Recordset oRecordset)
{
    string xmlString = "";

    if (oRecordset != null)
    {
        // Load recordset into stream
        var oStream = new Stream();
        oRecordset.Save(oStream, PersistFormatEnum.adPersistXML);

        // Get the XML
        xmlString = oStream.ReadText(oStream.Size);
    }

    return xmlString;
}

Как мне перевести этот код?

РЕДАКТИРОВАТЬ: Добавлен простой пример XML.

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="report">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="broj" type="xs:string" minOccurs="0" />
                <xs:element name="ugo_id" type="xs:string" minOccurs="0" />
                <xs:element name="osi_id" type="xs:string" minOccurs="0" />
                <xs:element name="poc_dat" type="xs:dateTime" minOccurs="0" />
                <xs:element name="ist_dat" type="xs:dateTime" minOccurs="0" />
                <xs:element name="ASSIST_CARD" type="xs:string" minOccurs="0" />
                <xs:element name="iznos" type="xs:decimal" minOccurs="0" />
                <xs:element name="ID_STATUST" type="xs:string" minOccurs="0" />
                <xs:element name="VRSTA" type="xs:string" minOccurs="0" />
                <xs:element name="marka" type="xs:string" minOccurs="0" />
                <xs:element name="tipmodel" type="xs:string" minOccurs="0" />
                <xs:element name="REG_OZN" type="xs:string" minOccurs="0" />
                <xs:element name="BR_SASIJE" type="xs:string" minOccurs="0" />
                <xs:element name="iznos1" type="xs:decimal" minOccurs="0" />
                <xs:element name="stat_id" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="zaglavlje">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="zagl_izv1" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv2" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv3" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv4" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv5" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv6" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv7" type="xs:string" minOccurs="0" />
                <xs:element name="zagl_izv8" type="xs:string" minOccurs="0" />
                <xs:element name="naslov_izv" type="xs:string" minOccurs="0" />
                <xs:element name="podnaslov_izv" type="xs:string" minOccurs="0" />
                <xs:element name="qser_no" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <report>
    <broj>18-0000001-01</broj>
    <ugo_id>5000000000011</ugo_id>
    <osi_id>5000000000011</osi_id>
    <poc_dat>2017-06-08T00:00:00+02:00</poc_dat>
    <ist_dat>2018-06-08T00:00:00+02:00</ist_dat>
    <ASSIST_CARD>1234567890</ASSIST_CARD>
    <iznos>88.50</iznos>
    <ID_STATUST xml:space="preserve"></ID_STATUST>
    <VRSTA>01</VRSTA>
    <marka>KIA</marka>
    <tipmodel>PRIDE</tipmodel>
    <REG_OZN>RI555RT  </REG_OZN>
    <BR_SASIJE>5454564564564</BR_SASIJE>
    <iznos1>88.50</iznos1>
    <stat_id>18040101</stat_id>
  </report>
  <zaglavlje>
    <zagl_izv1>MORE OSIGURANJE D.D.</zagl_izv1>
    <zagl_izv2>Petra Jurčića 16</zagl_izv2>
    <zagl_izv3>88000 MOSTAR</zagl_izv3>
    <zagl_izv4 />
    <zagl_izv5>SARAJEVO, 03.04.2019</zagl_izv5>
    <zagl_izv6 />
    <zagl_izv7 />
    <zagl_izv8 />
    <naslov_izv>Pregled CA polica u razdoblju: 01.03.2000 - 01.04.2020</naslov_izv>
    <podnaslov_izv />
    <qser_no>CUBIS REPORT 200021-857740081</qser_no>
  </zaglavlje>
</NewDataSet>
...