xml Datei erstellen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    xml Datei erstellen

    Hallo Ich habe mit folgenden Code eine XMl Datei erstellt.Funktioniert auch alles sauber auch bei mir das einlesen.Wenn ich jetzt diese Datei mit einem anderen Programm (b) einlesen will geht das nicht.Schaue ich mir die Datei im Firefox/Chrome an Sind meine Sachen alle Schwarz.Die gespeicherten Daten von dem Programm B sind Farbig.Der Explorer sagt auch das die Style informationen von dem Programm b fehlen.Ich weiß nicht wo der Fehler ist.Selbst einlesen in einem XMl Editor funkioniert und wenn ich diese dann abspeichere sind die Sachen auch in Farbe und die Style informationen fehlen.Ich möchte mich auch gleich entschuldigen das der Code nicht als Quellcode gekennzeichnet ist ,Leider bin ich auf Quellcode oben gegangen aber irgendwie klappt das nicht. :( Vielleicht kann mir mal einer helfen,ist bestimmt nur eine kleinigkeit die ich vergessenhabe oder nicht kenne.

    Mit freundlichen Grüßen

    Frank Schweichert



    Dim XmlWrt As XmlWriter = XmlWriter.Create(pfad & "\" & Datei, settings)

    With XmlWrt

    ' Write the Xml declaration.
    .WriteStartDocument()
    ' Write a comment.
    '.WriteComment("XML Database.")
    D = "Class=''File''"
    .WriteStartElement("PlaylistItem", Nothing)
    .WriteAttributeString("Class", "Class", Nothing, "File")

    .WriteStartElement("MaxAge", Nothing)
    .WriteString("10000")
    .WriteEndElement()

    ' Write the root element.
    .WriteStartElement("CueData")

    For I = 0 To mmdZeitanzeige.Lines.Length - 2
    .WriteStartElement("CueDataItem") ' ,
    .WriteAttributeString("Class", "Class", Nothing, "Track")
    .WriteAttributeString("Position", "Position", Nothing, mmdZeitanzeige.Lines(I))

    ' The person nodes.

    ArrayOfString = (Titelstream.Lines(I).Split("-"))
    String1 = ArrayOfString(0)
    String2 = ArrayOfString(1)


    .WriteStartElement("Title")
    .WriteString(String2)
    .WriteEndElement()

    .WriteStartElement("Artist")
    .WriteString(String1)
    .WriteEndElement()
    .WriteEndElement()
    Next

    ' The end of this person.
    ' .WriteEndElement()




    .WriteEndElement()
    .WriteStartElement("Title")
    .WriteString(StrSendung.Text)
    .WriteEndElement()

    .WriteStartElement("Artist")
    .WriteString(StrModerator.Text)
    .WriteEndElement()
    .WriteStartElement("Type")
    .WriteString("Music")
    .WriteEndElement()
    ' Close the XmlTextWriter.
    .WriteEndDocument()
    .Close()

    End With
    @schweichertf Zu Fuß ein XML-Dokument zusammenzusetzen ist nicht trivial.
    Du kannst natürlich Deine Lese-Routine analog zur Schreib-Routine aufbauen, aber dann ist die Datei noch lange keine XML-Datei, weil die Syntax nicht stimmt.
    Informationen welcher Art und welcher Beziehung zueinander willst Du denn speichern?
    Wie wäre es mit der XML-Serialisierung einer Daten-Klasse? XML-Serialisierung nachbilden
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Vorgabe wie der Aufbau zu seien hat sagt Programm B . Ich habe daraus Die daten in Mein Programm eingelesen.Wenn ich jetzt von meinem Programm Die Daten Speichere und sie in dem Programm B einlesen möchte funktioniert es nicht automatisch sondern ich muss es von Hand tuen.Dann geht es.Jetzt habe ich meine Datei genommen habe sie in einem XMl Editor eingelesen neu gespeichert und siehe da das Programm macht es automatisch.Meine frage ist wo ist bei mir der Fehler . Das scheint mir doch so als ob beim öffnen der XMl Datei eine Option fehlt.
    @schweichertf Vergleiche die von Dir gespeicherte Datei mit der vom XML-Editor gespeicherten, möglicherweise sind die Zeilenumbrüche anders.
    Wer hat das Einleseprogramm geschrieben? Beide Teile (Lesen + Schreiben) sollten gepaart implementiert werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dksksm schrieb:

    da fehlt mindestens das Encoding.
    Das ist korrekt.
    Sollte aber hier nicht den Effekt verursachen, da die NodeNames ASCII-Like sind.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    mhh .An sowas denke ich auch,weil wenn ich die Datei in den Wordpad Lade und dann einfach abspeichere ist alle in Ordnung.Hier nochmal zum verständniss.In meinem Programm funktioniert auch das einlesen.Nehme ich die Datei und möchte sie in dem Programm B einlesen geht es nicht.Der einzige unterschied ist halt das wenn man sich die datei anzeigen lässt im Explorer meine gespeicherten Daten alles Schwarz sind und nicht Lila ,Fett Schwarz und dünn schwarz. So sind die Settings definiert:

    Dim settings As New XmlWriterSettings()

    settings.Indent = True

    Muss man bei den Settings mehr definieren ?

    schweichertf schrieb:

    im Explorer meine gespeicherten Daten alles Schwarz sind und nicht Lila
    Kannst Du das mal visualisieren (je einen Scfreenshot posten)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So also ich habe heute einwenig rumprobiert . Das utf-8 steht in der ersten zeile. Das Sieht auch alles sehr identisch aus.Allerdings wenn man sich im Notepad++ die XMl dateien anschaut und vergleicht findet man einen Unterschied.Und genau da liegt wohl mein Problem.Ich habe das Pic mal eingefügt:



    Dort sieht man das man <Cuedataitem Class........> einklappen könnte wenn es lang genug währe.Nun meine frage was musss ich angeben das das nicht passiert. Meine Zeilen Poste ich hier noch mal drunter

    .WriteStartElement("CueDataItem")
    .WriteAttributeString("Class", "Class", Nothing, "Track")
    .WriteAttributeString("Position", "Position", Nothing, mmdZeitanzeige.Lines(I))

    .
    .
    .
    .WriteEndElement()
    Ich stehe da irgendwie auf dem Schlauch.
    @schweichertf Öffne mal den von Dir geposteten Link :!:
    Mach zwei Screenshots, von jedem Zustand einen.
    Erweiterte Antwort => Dateianhänge => Hochladen.
    =====
    Wenn Du einmal dabei bist, häng doch hleich die von Dir erzeugte XML-Datei mit an.
    @Dksksm Jou, es kann sein, dass das lesende Programm explizit ein Encoding fordert.
    Allerdings hab ich noch nicht gehört, dass ein XML-Editor ohne "Aufforderung" ein BOM einfügt und / oder das Encoding ändert (siehe Notepad++).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    RodFromGermany schrieb:

    Allerdings hab ich noch nicht gehört, dass ein XML-Editor ohne "Aufforderung" ein BOM einfügt und / oder das Encoding ändert (siehe Notepad++).


    Nee ich auch nicht^^

    Ich muss mir aber selbst widersprechen, ich habe mal mein Encoding Property weggelassen. Das Ergebnis hat sich gar nicht verändert, kann auch nicht wenn man die Microsoft Doku dazu liest.

    Dksksm schrieb:

    Encoding Property weggelassen.
    Mach das mal mit ner Unicode-XML.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also hier packe ich euch die beiden Dateien mal hinein.Bin gespannt auf was ihr für ideen kommt.Als erstes die die Funktioniert (McFly-Show....). Als zweites eine von mir erstellte (Schlagherboulevard......).Die Datei Endung bitte ignorieren.Ich glaube das das der richtige Weg ist.Ich übersehe irgend eine Kleinigkeit. Ich musste die aufgrund der Dateiendung packen.

    Danke
    Dateien
    • Dateien.zip

      (1,6 kB, 102 mal heruntergeladen, zuletzt: )
    @schweichertf Und was ist nun der Unterschied zwischen diesen beiden Dateien außer dem Inhalt?
    McFly-Show20170509.mmd hat keinerlei Zeilenschaltung, dies wird aber von den Standard-Viewern ignoriert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    schweichertf schrieb:

    Ich übersehe irgend eine Kleinigkeit


    Ich verstehe Dein Problem nicht.
    Die beiden Dateien unterscheiden sich nur geringfügig:
    Schlagerboulevard20180224 ist UTF8 mit BOM
    McFly-Show20170509 ist UTF8 ohne BOM

    Das war es eigentlich.
    Was Du willst ist scheint es mir nur etwas Optik und da solltest Du dich, ich wiederhole mich, mit den Settings auseinandersetzen, insbesondere mit den Properties Indent und IndentChars. Notwendig für eine korrekte XML ist das allerdings nicht.
    Ok ,
    Habe mal etwas pause gemacht und werde mich dort nochmal ransetzen,kommt dann die Lösung von alleine.Ich werde mich mit den Settings auseinander setzen villeicht liegt es ja wirklich an dem Bom . Könnte ja sein das das Eine Programm darauf besteht, Habe aber auch den Programierer jetzt Kontaktiert.

    Danke erstmal für eure Hilfe.