Создайте xml из результатов SQL на основе xsd в vb.net - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть хранимая процедура, которая дает следующие результаты, количество строк, возвращаемых из хранимой процедуры, может варьироваться в зависимости от переданного параметра.

Stored procedure results

Я хотел бы создать XML-файл примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<apiRequest>
   <orders>
      <order>
         <JobAddressId>Order 001</JobAddressId>
         <DepotCode>journease</DepotCode>
         <ScheduledDate>05/05/2014</ScheduledDate>
         <client>
            <Customer>Customer 1</Customer>
            <ContactName>Gary Davis</ContactName>
            <ContactTel>100000001</ContactTel>
            <contactEmail>jerry@gmail.com</contactEmail>
         </client>
         <location>
            <Postcode>Customer Location 1</Postcode>
            <address>5 HEDDERWICK HILL,WEST BARNS,DUNBAR,E. LOTHIAN,EH42 1XF</address>
            <latitude>52.855864</latitude>
            <longitude>-1.457062</longitude>
         </location>
         <dropWindows>
            <dropWindow>
               <TimeWindowStart>05/05/2019 8:00</TimeWindowStart>
               <TimeWindowEnd>05/05/2019 18:00</TimeWindowEnd>
            </dropWindow>
         </dropWindows>
         <priority>3</priority>
         <SpecialInstructions>some additional instructions</SpecialInstructions>
         <stopSequence>first</stopSequence>
      </order>
   </orders>
</apiRequest>

Схема для этого xml следующая (любезно предоставлено Freeformatter.com)

    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="apiRequest">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="orders">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="order">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="JobAddressId"/>
                    <xs:element type="xs:string" name="DepotCode"/>
                    <xs:element type="xs:string" name="ScheduledDate"/>
                    <xs:element name="client">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:string" name="Customer"/>
                          <xs:element type="xs:string" name="ContactName"/>
                          <xs:element type="xs:int" name="ContactTel"/>
                          <xs:element type="xs:string" name="contactEmail"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="location">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:string" name="Postcode"/>
                          <xs:element type="xs:string" name="address"/>
                          <xs:element type="xs:float" name="latitude"/>
                          <xs:element type="xs:float" name="longitude"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="dropWindows">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="dropWindow">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element type="xs:string" name="TimeWindowStart"/>
                                <xs:element type="xs:string" name="TimeWindowEnd"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element type="xs:byte" name="priority"/>
                    <xs:element type="xs:string" name="SpecialInstructions"/>
                    <xs:element type="xs:string" name="stopSequence"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Разделы вЗаказы XML, Client, Location и DropWindows должны увеличиваться в зависимости от возвращаемых строк.

Это то, что я пробовал до сих пор. Ссылка

Я использовал ссылку выше и сгенерировал следующий vb-файл с классами (Автоматически сгенерированное именование немного ненадежно, но эй хо)

Я бы хотелзнать, как сериализовать эти классы, я могу создать объект каждого класса, а затем объединить все объекты вместе, чтобы создать мой xml или использовать класс верхнего уровня (не уверен, какой класс верхнего уровня).

...