pat.bat
Goto Top

VB.NET - XML Daten lesen und in Textbox schreiben

Hallo,

ich stecke gerade an folgendem Problem fest.

Ich erstelle eine XML Datei wo ich Programmeinstellungen hinterlege. Derzeit werden nur Pfade bei mir hinterlegt die andere Skripts verwenden sollen.

Wenn ich die Daten nun beim Start der Form laden will komme ich immer auf einen Fehler, mir fällt leider auch keine Lösung ein, wie ich das bauen kann.

        ' Wenn XML Datei existiert lade die Datei und fülle die Textboxen  
        If File.Exists(xmlPath) Then
            xmlDoc.Load(xmlPath)
            Dim node As XmlNode
                txtBoxProsozAusgabe.Text = xmlDoc.SelectSingleNode("/Settings/Pfad/ProsozAusgabe").InnerText  
                txtBoxEVArchiv.Text = xmlDoc.SelectSingleNode("/Settings/Pfad/EVArchiv").InnerText  
                txtBoxEVAusgabeHH.Text = xmlDoc.SelectSingleNode("/Settings/Pfad/EVAusgabeHH").InnerText  

        Else ' XML-Datei existiert noch nicht, erstelle das Gerüst der Datei im Speicher  
            Dim XmlDeclaration As XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)  
            xmlDoc.InsertBefore(XmlDeclaration, xmlDoc.DocumentElement)
            Dim nodeRoot As XmlElement = xmlDoc.CreateElement("Settings")  
            Dim nodeProcess As XmlElement = xmlDoc.CreateElement("Pfad")  
            nodeRoot.AppendChild(nodeProcess)
            xmlDoc.AppendChild(nodeRoot)
            SaveXML()
        End If

Im Grunde muss ich durch jede Node lesen und dann die richtige abgreifen und die Textbox füllen. Beim ersten Start, ohne das Pfade hinterlegt wurden, crashed er raus mit der Meldung, das InnerText = Nothing.
Ich muss ihm also irgendwie itteilen, das wenn xmlDoc.SelectSingleNode("/Settings/Pfad/ProsozAusgabe").InnerText = Nothing, dann überspringe. Ich denke, ich könnte das über mehrere IF Anweisungen regeln, aber da muss es doch auch eine elegantere Art und Weise geben. Mir fällt nur derzeit nichts ein.

Vielen Dank im Voraus

Content-Key: 476354

Url: https://administrator.de/contentid/476354

Printed on: April 24, 2024 at 15:04 o'clock

Member: wiesi200
wiesi200 Jul 22, 2019 at 12:01:26 (UTC)
Goto Top
Hallo,

hab mich schon bei deiner INI Frage gewundert. Das nutzt doch keiner mehr, und hier der Aufwand.

Schau dir doch mal bitte das an.
https://docs.microsoft.com/de-de/dotnet/visual-basic/developing-apps/pro ...

glaub ich macht mehr Sinn.
Mitglied: 140447
140447 Jul 22, 2019 at 12:49:12 (UTC)
Goto Top
Wenn einem nichts einfällt, DOKU lesen
https://www.w3schools.com/xml/xpath_syntax.asp
Member: Pat.bat
Pat.bat Jul 22, 2019 at 12:59:54 (UTC)
Goto Top
Viel besser und einfacher, coole Sache. Wusste nicht das man das auch für externe Sachen nehmen kann.

Allerdings weiß ich nicht wo er mir nun die Einstellungen hinspeichert. In der Doku steht, das es in der App.Config ist. Dort werden mir auch die Namen angezeigt, aber keine Werte. Trotzdem lädt das Programm mit den richtig gespeicherten Werten.

??
Member: Pat.bat
Pat.bat Jul 22, 2019 at 14:27:42 (UTC)
Goto Top
Das Problem mit dieser Methode ist, nach gründlichem lesen, das diese Einstellungen per Benutzer gelten. Ich möchte aber in meinem Anwendungsordner eine Settings Datei haben wo für das Programm Pfade hinterlegt werden, womit die anderen Komponenten arbeiten können. Wie z.B. Ausgabepfad, Inputpfade usw.

Wenn die Anwendung nun auf einem Netzwerkordner liegt und von verschiedenen Nutzern bedient wird, habe ich mehrere user.config Dateien (pro User eine). Somit besteht die Gefahr, das der von User1 hinterlegte Pfad nicht der gleiche ist wie von User2.

Gibt es noch eine gute Variante um Anwedungseinstellungen wie diese im Programmpfad abzulegen?
Member: wiesi200
wiesi200 Jul 22, 2019 at 14:47:38 (UTC)
Goto Top
Zitat von @Pat.bat:

Gibt es noch eine gute Variante um Anwedungseinstellungen wie diese im Programmpfad abzulegen?

Ich würd jetzt nicht sagen das du gründlich gelesen hast. Man kann sagen ob Anwendungs oder User bezogen
Member: Pat.bat
Pat.bat Jul 22, 2019 updated at 14:56:01 (UTC)
Goto Top
Anwendungsbezogen kann man aber nicht mehr aus der Anwendung heraus ändern. Dies soll aber möglich sein.

Ich möchte somit 2 Arten von Einstellungen haben. Einmal die User Settings, da funktioniert die oben genannte Methode. Wo der User sich bestimmte Sachen einstellen kann, die dann nur für ihn gelten. Und einmal globale Einstellungen, die für jeden User gleich sind, aber trotzdem global geändert werden können und worauf andere Skripte zugreifen, um die besagten Pfade zu bekommen und um deren Funktion ausführen zu können.