XML Eintrag bearbeiten

  • VB.NET
  • .NET (FX) 4.0

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von xX-Nick-Xx.

    XML Eintrag bearbeiten

    Guten abend,

    Ich möchte in der XML

    XML-Quellcode

    1. ​<fillUnit unit="$l10n_unit_literShort" fillTypeCategories="forageWagon" capacity="100000"/>

    den Capacity (100000) Auslesen und mit einer Textbox editieren können.



    wie mach ich das am besten?!


    Danke im vorraus :P

    @xX-Nick-Xx Alles als XML Einlesen, den entsprechenden Eintrag bearbeiten, alles als XML speichern.
    Inerhalb einer Datei zu editieren geht so nicht.
    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!

    RodFromGermany schrieb:

    Inerhalb einer Datei zu editieren geht so nicht.
    Geht schon, ist halt nur elends aufwendig (Mit File.ReadAllText() einlesen, Position herausfinden, in Textbox schreiben, beim Speichern den Text ersetzen und Datei speichern)
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    ich hab bis jetzt rausgefunden wie ich das Value auslese aber mehr hab ich nicht rausgefunden mit xDoc :D

    VB.NET-Quellcode

    1. Dim Doc As XDocument = XDocument.Load(FolderBrowserDialog1.SelectedPath & "/modDesc.xml")
    2. info_path.Text = Doc.<modDesc>.<storeItems>.<storeItems>.@xmlFilename

    Das hab ich bis jetzt aber xmlFilename liest er nicht aus :O

    Radinator schrieb:

    Geht schon
    Du beschreibst gerade das Gegenteil. ;)
    @xX-Nick-Xx Warum nimmst Du keinen OpenFileDialog und gibst dem vor dem Aufruf .FileName = "modDesc.xml" :?:
    Hast Du dieses XML-Dokument als solches im Griff?
    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!
    @xX-Nick-Xx Die eigentliche Frage ist diese:

    RodFromGermany schrieb:

    Hast Du dieses XML-Dokument als solches im Griff?
    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!

    RodFromGermany schrieb:

    Du beschreibst gerade das Gegenteil.
    Ja. Ja das tue ich ;D
    Einfach weil die Aussage Inerhalb einer Datei zu editieren geht so nicht. (IMHO) einfach falsch ist. Geht schon, ist halt nur elends aufwendig
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Auslesen hab ich soweit geschafft. nur jetzt Bekomm ich immer einen Fehler

    VB.NET-Quellcode

    1. Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in ModStudio17.exe aufgetreten.
    2. Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


    Bei

    VB.NET-Quellcode

    1. xmldoc.DocumentElement("fuelCapacity").InnerText = TextBox1.Text
    2. xmldoc2.DocumentElement("price").InnerText = CType(NumericUpDown1.Value, String)


    bei xmldoc2 bekommt er die meldung bei xmldoc aber nicht...

    Ganzer code:

    VB.NET-Quellcode

    1. Dim fuell_val As String = TextBox1.Text
    2. Dim path As String = FolderBrowserDialog1.SelectedPath.ToString
    3. Dim xmldoc As XmlDocument = New XmlDocument
    4. Dim xmldoc2 As XmlDocument = New XmlDocument
    5. xmldoc.Load(path_save.Text)
    6. xmldoc.DocumentElement("fuelCapacity").InnerText = TextBox1.Text
    7. xmldoc2.DocumentElement("price").InnerText = CType(NumericUpDown1.Value, String)
    8. xmldoc.Save(path_save.Text)
    9. ifsave.ForeColor = Color.Green


    Weiß jemand ne lösung?! Danke im vorraus

    xX-Nick-Xx schrieb:

    CType(NumericUpDown1.Value, String)

    <X

    Der Typ Object hat eine Methode, die nennt sich .ToString Und da absolut jeder Typ in .NET von Object erbt, ob es will oder nicht, hat absolut jeder Typ eine .ToString Methode. Diese .ToString Methode ist für die meisten Typen im .NET Framework speziell überschrieben worden, sodass diese Typen nicht ihren eigenen Typ zurückgeben, sondern oft etwas bei weitem Sinnvolleres. Gerade bei Zahlentypen wird hier z.B. vollautomatisch, und ohne dein Zutun, darauf geachtet, dass der Zahlwert im Korrekten Format der aktuellen Thread-Kultur angezeigt wird (Dezimal und Tausender trennzeichen).
    Ich bitte dich also darum das nächste mal, wenn du irgendwas in einen String umwandeln möchtest, zuerst mal nachzusehen was .ToString bereits für dich erledigt, anstatt die Brechstange zu benuten.

    xX-Nick-Xx schrieb:

    VB.NET-Quellcode

    1. Dim xmldoc As XmlDocument = New XmlDocument
    2. Dim xmldoc2 As XmlDocument = New XmlDocument
    3. xmldoc.Load(path_save.Text)

    Fehlt da nicht noch ein .Load ? ;)

    EaranMaleasi schrieb:

    Fehlt da nicht noch ein .Load ?

    Ja das hatte ich vergessen xD, Aber Trotzdem wirft er noch den Fehler raus (hab es zu .ToString verändert.

    bei dem 1 xmldoc Funktioniert es komischerweise ohne Probleme...

    Ps: Manchmal macht VS das alleine mit dem CType und String..

    @EaranMaleasi Ja price gibt es wirklich.

    Problem gefunden, Es lag am: /

    Nächstes Problem:

    VB.NET-Quellcode

    1. Dim xml As XDocument = XDocument.Load(path_save.Text.ToString)
    2. '''''''
    3. xml.Descendants("vehicle").Elements("fuelCapacity").Value = num_fuel.Value.ToString
    4. ''''''
    5. xml.Save(path_save.Text.ToString)
    6. ifsave.ForeColor = Color.Green


    Wie kann ich ein Attribut bearbeiten?!

    xX-Nick-Xx schrieb:


    VB.NET-Quellcode

    1. Dim Doc As XDocument = XDocument.Load(FolderBrowserDialog1.SelectedPath & "/modDesc.xml")
    2. info_path.Text = Doc.<modDesc>.<storeItems>.<storeItems>.@xmlFilename
    Eiglich nicht schlecht, nur solltest du Datentypen beachten.
    Also ich fürchtefast, du proggst Strict Off, - also mit deaktivierter Compiler-Unterstützung sucht man dann sehr oft an total der falschen Stelle.

    jdfs. hier wird auch ein Attribut "bearbeitet" (ich hoffe, das ist, was du unter "bearbeiten" verstehst - für mich ist das eine Zuweisung).
    Xml verarbeiten mit Intellisense (Schema und XDocument)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()