xml-Datei schreiben funktioniert immer noch nicht richtig

12/03/2008 - 19:47 von Stefan Theobald | Report spam
Hallo NewsGroup,

ich habe immer noch Probleme eine XML-Datei zu schreiben.
Ich bin am verzweifeln und für jede Hilfe dankbar.

Aber hier das Problem im Datail:
Ich habe eine XSD-Datei erstellt (s. unten). Diese Struktur lade ich in ein
DataSet. Das DataSet wiederum ist zur graf. Ausgabe an ein DataGrid
gebunden.

Das habe ich mit folgendem Code erledigt:
Dim ds As New DataSet()

ds.ReadXmlSchema("C:\orders_in.xsd")
DataGrid1.DataSource = ds

Dim Datenzeile_ListOfOrders As DataRow = ds.Tables("ListOfOrders").NewRow
Datenzeile_ListOfOrders.Item("CreationDate") =
System.Diagnostics.Stopwatch.GetTimestamp
ds.Tables("ListOfOrders").Rows.Add(Datenzeile_ListOfOrders)

Dim Datenzeile_Order As DataRow = ds.Tables("Order").NewRow
Datenzeile_Order.Item("ListOfOrders_Id") = 0
Datenzeile_Order.Item("OrderNo") = "1003"
ds.Tables("Order").Rows.Add(Datenzeile_Order)

Dim Datenzeile_OrderInformation As DataRow =
ds.Tables("OrderInformation").NewRow
Datenzeile_OrderInformation.Item("Order_Id") = 0
ds.Tables("OrderInformation").Rows.Add(Datenzeile_OrderInformation)

Dim Datenzeile_Information As DataRow = ds.Tables("Information").NewRow
Datenzeile_Information.Item("Description") = "Beschreibung_88"
Datenzeile_Information.Item("InformationTypeID") = "88"
Datenzeile_Information.Item("Information_Text") = "Informationstext_88"
ds.Tables("Information").Rows.Add(Datenzeile_Information)

Datenzeile_Information = ds.Tables("Information").NewRow
Datenzeile_Information.Item("Description") = "Beschreibung:99"
Datenzeile_Information.Item("InformationTypeID") = "99"
Datenzeile_Information.Item("Information_Text") = "Informationstext_99"
ds.Tables("Information").Rows.Add(Datenzeile_Information)

ds.WriteXml("C:\herbert.xml")

Mittlerweile (nach dem löschen des DataGrid und neu reiziehens) werden dort
zumindest die Kunoten (+-Zeichen) richtig dagestellt.

Mein Problem ist aber:
a) in meinem DataGrid werden in dem Unterknoten INFORMATION nicht die
eingegebenen Werte dagestellt.
b) die rausgeschriebene XML-Datei stimmt von der Struktur her nicht! -
Wieso? Wie bekomme ich das korrekt hin?

Bei meiner XML kommt folgendes raus:

<?xml version="1.0" standalone="yes"?>
<ORDERS_IN xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...">
<ListOfOrders CreationDate="5163268086">
<Order OrderNo="1003">
<OrderInformation />
<OrderContent>
<Position />
</OrderContent>
</Order>
</ListOfOrders>
<Information Description="Beschreibung_88"
InformationTypeID="88">Informationstext_88</Information>
<Information Description="Beschreibung:99"
InformationTypeID="99">Informationstext_99</Information>
</ORDERS_IN>

Es müsste der Block INFORMATION in dem Block ORDERINFORMATION stehen und
dieser wiederum nach ORDER.
Wenn ich mir die XSD im Designer vom VS anschaue sieht auch alles gut aus,
nur es kommt immer so ein M... raus! - Ist da ein Bug in VB? wie bekomme ich
das richtig hin????

Ich hoffe, dass mir jemand helfen kann.


Gruß
Stefan


Hier noch meine XSD:

<?xml version="1.0" standalone="yes"?>
<xs:schema id="ORDERS_IN" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ListOfOrders">
<xs:complexType>
<xs:sequence>
<xs:element name="Order" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderInformation" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Information" nillable="true"
minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent
msdata:ColumnName="Information_Text" msdata:Ordinal="2">
<xs:extension base="xs:string">
<xs:attribute name="Description"
type="xs:string" />
<xs:attribute name="InformationTypeID"
type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="OrderContent" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Position" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderContentInformation"
minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="InformationPos"
nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent
msdata:ColumnName="InformationPos_Text" msdata:Ordinal="2">
<xs:extension base="xs:string">
<xs:attribute name="Description"
type="xs:string" />
<xs:attribute
name="InformationTypeID" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="No" type="xs:string" />
<xs:attribute name="OrderStateID" type="xs:string"
/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="OrderNo" type="xs:string" />
<xs:attribute name="InvoiceCustomerNo" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="CreationDate" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="ORDERS_IN" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ListOfOrders" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
 

Lesen sie die antworten

#1 Peter Fleischer
14/03/2008 - 07:39 | Warnen spam
"Stefan Theobald" schrieb im Newsbeitrag
news:%

Aber hier das Problem im Datail:
Ich habe eine XSD-Datei erstellt (s. unten).



Hi Stefan,
in der XSD werden 8 Tabellen beschrieben. Unklar ist, warum du solche
Struktur gewàhlt hast. Warum ordnest du besipielsweise der Order-Tabelle
eine Liste unterschiedlicher OrderInformation zu, die wiederum mehrere
Einzelinformation-Eintràge haben kann. Da die Orderinformation keinen
weiteren Attribute enthàlt, ist die Gruppierung der Information zu einem
Order-Eintrag sinnlos. Hier hast du aus meiner Sicht sinnlos normalisiert,
wenn es keine weiteren Attribute gibt, die du veilleicht der Einfachkeit
halber nur nicht in das Beispiel eingeschlossen hast.

Diese Struktur lade ich in ein DataSet. Das DataSet wiederum ist zur graf.
Ausgabe an ein DataGrid gebunden.

Das habe ich mit folgendem Code erledigt:
Dim ds As New DataSet()

ds.ReadXmlSchema("C:\orders_in.xsd")
DataGrid1.DataSource = ds

Dim Datenzeile_ListOfOrders As DataRow = ds.Tables("ListOfOrders").NewRow
Datenzeile_ListOfOrders.Item("CreationDate") =
System.Diagnostics.Stopwatch.GetTimestamp
ds.Tables("ListOfOrders").Rows.Add(Datenzeile_ListOfOrders)

Dim Datenzeile_Order As DataRow = ds.Tables("Order").NewRow
Datenzeile_Order.Item("ListOfOrders_Id") = 0
Datenzeile_Order.Item("OrderNo") = "1003"
ds.Tables("Order").Rows.Add(Datenzeile_Order)

Dim Datenzeile_OrderInformation As DataRow =
ds.Tables("OrderInformation").NewRow
Datenzeile_OrderInformation.Item("Order_Id") = 0
ds.Tables("OrderInformation").Rows.Add(Datenzeile_OrderInformation)

Dim Datenzeile_Information As DataRow = ds.Tables("Information").NewRow
Datenzeile_Information.Item("Description") = "Beschreibung_88"
Datenzeile_Information.Item("InformationTypeID") = "88"
Datenzeile_Information.Item("Information_Text") = "Informationstext_88"
ds.Tables("Information").Rows.Add(Datenzeile_Information)

Datenzeile_Information = ds.Tables("Information").NewRow
Datenzeile_Information.Item("Description") = "Beschreibung:99"
Datenzeile_Information.Item("InformationTypeID") = "99"
Datenzeile_Information.Item("Information_Text") = "Informationstext_99"
ds.Tables("Information").Rows.Add(Datenzeile_Information)

ds.WriteXml("C:\herbert.xml")

Mittlerweile (nach dem löschen des DataGrid und neu reiziehens) werden
dort zumindest die Kunoten (+-Zeichen) richtig dagestellt.

Mein Problem ist aber:
a) in meinem DataGrid werden in dem Unterknoten INFORMATION nicht die
eingegebenen Werte dagestellt.



Schau dir mal die XML-Datei an. Die Knoten Information sind nicht der
OrderInformation untergeordnet. Da fehlt die Zuweisung des
Fremdschlüsselwertes und es gibt auch keinen Standartwert in deinem Schema.
Du arbeitest mit Startwert des Autowertes=0, was absolut unüblich ist.

b) die rausgeschriebene XML-Datei stimmt von der Struktur her nicht! -
Wieso? Wie bekomme ich das korrekt hin?



Die Struktur stimmt genau mit dem überein, was du programmiert hast. Ich
kann da keinen fehler erkennen.

Es müsste der Block INFORMATION in dem Block ORDERINFORMATION stehen und
dieser wiederum nach ORDER.



NEIN. Wenn du keinen richtigen Fremdschlüsselwert zuweist, gibt es auch
keine Zuordnung.

Wenn ich mir die XSD im Designer vom VS anschaue sieht auch alles gut aus,
nur es kommt immer so ein M... raus! - Ist da ein Bug in VB? wie bekomme
ich das richtig hin????



Beseitige den Bug vor dem Bildschirm :-)

Meine Empfehlung: Nimm die aktuelle Version von VB und LinqTo XML. Da wird
der Code übersichtlicher und auch die Problemverfolgung wird einfacher.

Viele Gruesse

Peter

Ähnliche fragen