writexml: write empty columns

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von vanao.

    writexml: write empty columns

    Ich schreibe meine datatable mit

    VB.NET-Quellcode

    1. Public dSavings As Data.DataTable
    2. dim file As String = Startfenster.save_directory & ".xml"
    3. dSavings.WriteXml(file)


    und es wird in etwa folgendes geschrieben:

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <DocumentElement>
    3. <DataTable1>
    4. <ID>0</ID>
    5. <DeviceID>AX</DeviceID>
    6. <Group>2</Group>
    7. <Gender>1</Gender>
    8. <Age>9</Age>
    9. <DateOfTest>17.02.2013</DateOfTest>
    10. <TimeOfTest>11:03:04.2621353</TimeOfTest>
    11. <BrixtonResp1_1>1434.082</BrixtonResp1_1>
    12. <BrixtonResp1_2>0</BrixtonResp1_2>
    13. <BrixtonResp1_3>71.004</BrixtonResp1_3>
    14. <BrixtonResp1_4>1615.0923</BrixtonResp1_4>
    15. <BrixtonResp1_5>0</BrixtonResp1_5>
    16. <BrixtonResp1_6>675.03860000000009</BrixtonResp1_6>
    17. <BrixtonResp2_1>3003.1718</BrixtonResp2_1>
    18. </DataTable1>
    19. </DocumentElement>


    Ich habe in meiner DataTable jedoch viel mehr Spalten definiert, die alle nicht geschrieben werden wenn sie leer sind.
    Gibt's eine Möglichkeit die zu schreiben auch wenn sie leer sind?
    Danke. Das sollte man tun, weil fehlende Werte einfach bedeuten, dass der Benutzer keine Eingabe gemacht hat und ich möchte nicht, dass diese Information verloren geht. Wenn ich den Datensatz so weitergebe sieht es so aus, als wären die entsprechenden Eingaben niemals angefordert worden.
    Das sind Schema-Informationen.

    Vlt. sollteste besser ein typisiertes Dataset nehmen, mit der DataTable drin. TypDataset kennt sein Schema.

    Ansonsten kannstedir auch aus Xml ein Schema generieren, oder selbst eins verfassen.

    Gibts da bei WriteXml nicht sogar eine Überladung, wo man IncludeSchema angeben kann?
    Supi, das klappt schon fast. ich schreibe das Schema und die Daten mit

    VB.NET-Quellcode

    1. dSavings.WriteXml(file, False)
    2. dSavings.WriteXmlSchema(file & ".xsd", False)


    Dann entstehen folgende Dateien:
    Schema:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
    3. <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="DataTable1" msdata:UseCurrentLocale="true">
    4. <xs:complexType>
    5. <xs:choice minOccurs="0" maxOccurs="unbounded">
    6. <xs:element name="DataTable1">
    7. <xs:complexType>
    8. <xs:sequence>
    9. <xs:element name="ID" msdata:AutoIncrement="true" type="xs:int" />
    10. <xs:element name="DeviceID" type="xs:string" minOccurs="0" />
    11. <xs:element name="Group" type="xs:int" minOccurs="0" />
    12. <xs:element name="Gender" type="xs:int" minOccurs="0" />
    13. <xs:element name="Age" type="xs:double" minOccurs="0" />
    14. <xs:element name="DateOfTest" type="xs:string" minOccurs="0" />
    15. <xs:element name="TimeOfTest" type="xs:string" minOccurs="0" />
    16. <xs:element name="BrixtonResp1_1" msprop:Generator_UserColumnName="BrixtonResp1_1" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_1" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_1" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_1Column" type="xs:double" minOccurs="0" />
    17. <xs:element name="BrixtonResp1_2" msprop:Generator_UserColumnName="BrixtonResp1_2" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_2" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_2" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_2Column" type="xs:double" minOccurs="0" />
    18. <xs:element name="BrixtonResp1_3" msprop:Generator_UserColumnName="BrixtonResp1_3" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_3" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_3" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_3Column" type="xs:double" minOccurs="0" />
    19. <xs:element name="BrixtonResp1_4" msprop:Generator_UserColumnName="BrixtonResp1_4" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_4" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_4" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_4Column" type="xs:double" minOccurs="0" />
    20. <xs:element name="BrixtonResp1_5" msprop:Generator_UserColumnName="BrixtonResp1_5" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_5" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_5" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_5Column" type="xs:double" minOccurs="0" />
    21. <xs:element name="BrixtonResp1_6" msprop:Generator_UserColumnName="BrixtonResp1_6" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_6" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_6" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_6Column" type="xs:double" minOccurs="0" />
    22. <xs:element name="BrixtonResp1_7" msprop:Generator_UserColumnName="BrixtonResp1_7" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_7" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_7" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_7Column" type="xs:double" minOccurs="0" />
    23. <xs:element name="BrixtonResp1_8" msprop:Generator_UserColumnName="BrixtonResp1_8" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_8" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_8" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_8Column" type="xs:double" minOccurs="0" />
    24. <xs:element name="BrixtonResp1_9" msprop:Generator_UserColumnName="BrixtonResp1_9" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_9" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_9" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_9Column" type="xs:double" minOccurs="0" />
    25. <xs:element name="BrixtonResp1_10" msprop:Generator_UserColumnName="BrixtonResp1_10" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_10" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_10" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_10Column" type="xs:double" minOccurs="0" />
    26. <xs:element name="BrixtonResp1_11" msprop:Generator_UserColumnName="BrixtonResp1_11" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp1_11" msprop:Generator_ColumnPropNameInRow="_BrixtonResp1_11" msprop:Generator_ColumnPropNameInTable="_BrixtonResp1_11Column" type="xs:double" minOccurs="0" />
    27. <xs:element name="BrixtonResp2_1" msprop:Generator_UserColumnName="BrixtonResp2_1" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp2_1" msprop:Generator_ColumnPropNameInRow="_BrixtonResp2_1" msprop:Generator_ColumnPropNameInTable="_BrixtonResp2_1Column" type="xs:double" minOccurs="0" />
    28. <xs:element name="BrixtonResp2_2" msprop:Generator_UserColumnName="BrixtonResp2_2" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp2_2" msprop:Generator_ColumnPropNameInRow="_BrixtonResp2_2" msprop:Generator_ColumnPropNameInTable="_BrixtonResp2_2Column" type="xs:double" minOccurs="0" />
    29. <xs:element name="BrixtonResp2_3" msprop:Generator_UserColumnName="BrixtonResp2_3" msprop:Generator_ColumnVarNameInTable="_columnBrixtonResp2_3" msprop:Generator_ColumnPropNameInRow="_BrixtonResp2_3" msprop:Generator_ColumnPropNameInTable="_BrixtonResp2_3Column" type="xs:double" minOccurs="0" />
    30. </xs:sequence>
    31. </xs:complexType>
    32. </xs:element>
    33. </xs:choice>
    34. </xs:complexType>
    35. </xs:element>
    36. </xs:schema>




    Daten:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <DocumentElement>
    3. <DataTable1>
    4. <ID>0</ID>
    5. <DeviceID>AX</DeviceID>
    6. <Group>1</Group>
    7. <Gender>1</Gender>
    8. <Age>8</Age>
    9. <DateOfTest>18.02.2013</DateOfTest>
    10. <TimeOfTest>14:42:11.4296577</TimeOfTest>
    11. <BrixtonResp1_1>933</BrixtonResp1_1>
    12. <BrixtonResp1_2>0</BrixtonResp1_2>
    13. <BrixtonResp1_3>3064</BrixtonResp1_3>
    14. <BrixtonResp1_4>0</BrixtonResp1_4>
    15. </DataTable1>
    16. </DocumentElement>



    Jetzt will ich das ganze in Excel einfügen. Da bekomme ich aber eine Fehlermeldung, dass das Schema nicht zu den Daten passt (bzw. umgekehrt) ?(
    Kann sich das jemand erklären?
    5 Regeln für sinnvolle Fragen - Fehlerzeile?

    weil ich wundere mich, dass Excel ühaupt etwas vom Schema weiß.
    und wie gesagt: ich mach das sonst immer gleich mit einem ganzen typisierten Dataset - da kriege ich beim einlesen die Datensätze exakt so raus, wie sie weggeschrieben wurden.
    Ach nein, das hat nix mit einer Fehlerzeile zu tun. ich importiere das in Excel mit dem User-Menü der Excel-Software. Da werden einfach die xml-/xsd-files eingelesen. Aber, wie gesagt, da bekomme ich die Rückmeldung dass es nicht zusammenpasst.
    Ich vermute eher dass es was mit dem output zu tun hat, den die Befehle "writeXML" bzw "writeXMLschema" liefern. Wenn man sich den Aufbau der XML-codes anschaut, dann sieht das im Schema anders aus, i.e.
    * Es steht immer "xs" vor den elementen
    * Es gibt mehr Knoten/Ebenen
    * Die Elemente haben viele Attribute
    Vielleicht liegt es auch daran, dass Excel die Datentypen (e.g. double) nicht kennt?

    Ich kann's mir nicht erklären

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vanao“ ()