raiserle Geschrieben 16. November 2012 Geschrieben 16. November 2012 (bearbeitet) Hallo Leute, ich habe eine XML, die in verschiedenen Elementen immer ein Unterelement namens <TAG> hat. Nun habe ich folgendes gefunden.... Quelle: Einlesen von XML in ein DataSet: Codebeispiel für Visual Basic .NET (VB.NET) und CSharp (C#) .....Allerdings darf es nicht zwei gleichnamige Elemente an verschiedenen Stellen im XML-Dokument geben; z.B. darf <Name> nicht Unterelement von <Person> sein und an anderer Stelle im Dokument Unterelement von <Firma>. Die Elementnamen müssen also im gesamten Dokument eindeutig sein. Was auch dem Verhalten entspricht, wenn ich die XML versuche in eine DataSet zu lesen (es geht nicht, ich erhalten einen eigenen Table für "tag" ohne zu wissen, ob "read" oder "write"). Kennt jemand von euch einen anderen Weg, wie man so etwas bewerkstelligen kann - außer: Die XML selbst zu parsen? Die Struktur sieht so aus. Und ich möchte nun aus "read" und write alle "tag" auslesen. Zugehörig zu ihrem übergeordneten Element. Mit DataSet geht das leider so nicht. <xml ...... <config .....> <read> <tag name..../> <tag name..../> </read> <write> <tag name..../> <tag name..../> </write> </config> vG Henrik Bearbeitet 16. November 2012 von raiserle erweitert Zitieren
Pixie Geschrieben 17. November 2012 Geschrieben 17. November 2012 In welcher Form brauchst Du denn die Daten? Hast Du Einfluss auf die Struktur des XMLs? Wenn ja, schau Dir mal XmlSerializer an (Namespace: System.Xml.Serialization). Damit kannst Du eigene generische Klassen, die auch Listen oder Arrays enthalten dürfen, einfach serialisieren und deserialisieren. Zitieren
raiserle Geschrieben 18. November 2012 Autor Geschrieben 18. November 2012 Danke für den Tipp. Also Einfluss auf die XML-Struktur habe ich nicht. Aber es geht auch ohne . System.Xml.Serialization ist genau das richtige gewesen. Für diejenigen, die auch mal so etwas machen müssen/wollen. Diese XML soll gelesen werden - und es SOLL 2 Listen geben (read,write) die jeweils den Type Tag enthalten. <?xml version="1.0" encoding="utf-8" ?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="core_schema.xsd"> <read> <tag name="TESTVAR1" interval="1000" description="zum testen" /> <tag name="TESTVAR2" interval="1000" /> <tag name="TESTVAR3" interval="1000" /> </read> <write> <tag name="TESTVAR1" description="zum testen"/> </write> </config> Also der Code in VB! Sub Main() Dim xmlClassStructure_to_deserialize As New System.Xml.Serialization.XmlSerializer(GetType(Config)) Dim xml_stream As New System.IO.StreamReader("tags.xml") Dim config As Config config = xmlClassStructure_to_deserialize.Deserialize(xml_stream) xml_stream.Close() End Sub 'die benötigten klassen (strukturen ) <System.Xml.Serialization.XmlRoot("config")> Class Config <System.Xml.Serialization.XmlArrayItem("tag")> Public read() As Tag <System.Xml.Serialization.XmlArrayItem("tag")> Public write() As Tag End Class Class Tag <System.Xml.Serialization.XmlAttribute("name")> Public Property name As String <System.Xml.Serialization.XmlAttribute("interval")> Public Property interval As UInt32 <System.Xml.Serialization.XmlAttribute("description")> Public Property desc As String End Class [/code] Nochmal danke für den Tipp! Funktioniert super und ist genau dass - was ich brauche. vG Henrik Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.