Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

XML-Reaer Data.DataSet, Nur ein Table pro Dukument?

Empfohlene Antworten

Veröffentlicht

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 von raiserle
erweitert

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.

  • Autor

Danke für den Tipp.

Also Einfluss auf die XML-Struktur habe ich nicht.

Aber es geht auch ohne :D.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.