Zeile in XML-Datei mittels AutoIT-Fenster ändern

  • Hallo zusammen,

    im Rahmen einer automatischen Installation von "Microsoft Office 2012" habe ich eine XML Datei (config.xml). Diese XML-Datei muss ich jedoch immer bzgl. des Office-Lizenz-Keys anpassen.

    Nun würde ich gerne über ein AutoIt-Fenster eben genau diesen Lizenz-Key ändern.

    Sprich:
    - AutoIt soll die XML-Datei öffnen (anzeigen des Inhaltes ist nicht gewünscht)
    - In der XML-Datei gibt es eine Zeile <PIDKEY Value="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" /> welche den Office-Lizenz-Key beinhaltet
    - Nun soll genau dieser Wert durch den neuen Wert, welche im AutoIT-Fenster eingegeben werden soll ersetz werden
    - Anschließend muss die geänderte XML-Datei natürlich wieder an Ort und Stelle gespeichert werden

    Als "Newbie" bin ich auf

    [ abgeschlossen ] Bitte um Hille! Gui mit Editfelt und Ausgabe in Datei

    gestoßen weiß aber nicht, wie ich ein solches AutoIt-Script nach meinen Anforderungen erstelle oder aber dieses Script entsprechend abändern kann.

    Für Hilfe bin ich sehr dankbar

    Einmal editiert, zuletzt von SendXP (2. August 2012 um 12:44) aus folgendem Grund: Auf Wunsch anderer Forenmitglieder auf gelöst gesetzt

  • Das würde ich mit folgenden lösen:
    Inputbox
    _StringBetween
    StringReplace
    Und natürlich die File-Funktionen

    Dafür brauchst du keine GUI.

  • Vielen Dank an "m-obi" :)
    Ich benötige die GUI, da das AutoIT-Script als EXE in eine weitere "Installationsroutine" gepackt wird.
    Endlich soll dann die "Installationsroutine" gestartet werden. Diese startet dann das AutoIt-Script, welches vom User die Lizenz-Key eingabe erwartet. Der Key wird in die "config.xml" aufgenommen, das AutoIt-Script beendet und die "Installationsroutine" installiert diverse Applikationen und zieht den Office Key aus eben jeder XML Datei.
    Das die "Installationsroutine" auch den unterschiedlichsten Windows PCs läuft, der Lizenz-Key aber eben nur einmal vergeben werden darf, muss ich den Key irgendwie ändern. Manuell könnte ich natürlich immer in die XML-Datei gehen und den Key dort ändern, das birgt aber die Fehleranfälligkeit, dass es vergessen werden kann und ein Key mehr als einmal verwendet wird.

    Also - eine GUI wäre schön.

  • Hallo

    es geht mit

    Zitat

    _ReplaceStringInFile

    Ersetzt in einer Textdatei einen String mit einem anderen String (binary funktioniert nicht!)

    Quelle: dt. Hilfeübersetzung

    SendXP: da ja mit jeder der beiden Möglichkieten dein Problem Schön gelöst ist wäre es allerdings auch schön wenn du das Thema auf gelöst stellst. Dazu einfach deinen Eröffnungsbeitrag bearbeiten und den Präfix (Nähe Überschrift) auf gelöst stellen,

    danke autoBert
    mfg autoBert

  • Hallo autoBert,

    gerne setze ich eine Eintrag auf gelöst sobald er gelöst ist. Leider ist der das nach meiner Auffassung nicht. Ich suche hier Hilfe und Unterstützung und komme leider mit "_ReplaceStringInFile" nicht wirklich weiter.

    Aktuell habe ich folgendes Script

    [autoit]

    $datei = FileOpen("d:\config.xml", 0)

    [/autoit][autoit][/autoit][autoit]

    ; Überprüfe ob die Datei geöffnet werden konnte
    If $datei = -1 Then
    MsgBox(0, "Error", "Konnte Datei nicht öffnen.")
    Exit
    EndIf
    $text=FileRead($datei)
    $neu = _ReplaceStringInFile ; <PIDKEY Value="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" />
    FileClose($datei)

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("d:\config.xml", 1)

    [/autoit][autoit][/autoit][autoit]

    ; Prüfen, ob Datei im Schreibmodus geöffnet ist
    If $file = -1 Then
    MsgBox(0, "Fehler!", "Die Ausgabe-Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    FileWrite($file, $neu)
    FileClose($file)

    [/autoit]

    Die Zeile

    $neu = _ReplaceStringInFile ; <PIDKEY Value="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" />

    sollte dann die ganzen Xse ersetzen. Davon bin ich aber noch weit entfernt. Ich habe eine bestehende XML-Datei die es zu ändern gilt. Den Änderungswert, also das was anstelle der Xse in die XML-Datei rein soll, muss ich ja noch irgendwie erfassen und dann die Datei speichern.
    Kurz um, ich benötige eine Art XML-Editor der eben genau den Wert zwischen

    <PIDKEY Value="

    und

    />

    über eine Eingabe in einem Eingabefeld überschreibt.
    Als Newie würde ich nicht die Hilfe und Unterstützung im Forum suchen, wenn ich wüsste, was zu tun ist. Sorry, aber ich bin, wie gesagt noch nicht ansatzweise an der Lösung.

  • das ist ihm schon klar, nur kennt er den 'suchstring' ja nicht, da der key ja immer ein andere ist.

    ist das xml file schön untergliedert? also durch zeilenumbrüche, oder alles in einer zeile?

    sonst würde ich die Datei Zeilenweise durchgehen und in jeder zeile prüfen STringInString( $zeile, "<PIDKEY") und dann könntest du, da du ja nun den inhalt der zeile weißt, per
    _ReplaceStringInFile('Pfad_Deiner_Datei", 'SUCHSTRING', 'ERSETZSTRING') das ersetzten.

    Geht bestimmt auch anders :) reguläre ausdrücke denk ich mal

  • das ist ihm schon klar, nur kennt er den 'suchstring' ja nicht, da der key ja immer ein andere ist.


    Er hat dpch den Suchstring:

    Sprich:
    - AutoIt soll die XML-Datei öffnen (anzeigen des Inhaltes ist nicht gewünscht)
    - In der XML-Datei gibt es eine Zeile <PIDKEY Value="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" /> welche den Office-Lizenz-Key beinhaltet
    - Nun soll genau dieser Wert durch den neuen Wert, welche im AutoIT-Fenster eingegeben werden soll ersetz werden

    Selbst wenn die Xen hier nur als Beispiel dienen sllen, was spricht dagegen den Suchstring einmal in sein SKript zu übertragen und eine Arbeitskopie auf den zu installierenden Rechnern einzuspielen? Zum kopieren kann er ja FileCopy nehmen, im ünrigen funktiniert die Methode vn m-obi auch mit einem unebekannten Lizenzkey solange davor <PIDKEY Value=" und dahinter " /> steht.

    SendXP: sich nach 3 Jahren noch als NewBie zu bezeichnen ist aber ziemlich stark koketiert, die GUI mit einem Input und einem Buttn wirst du ja noch hinbekommen, ansonsten lies dir die Hilfe zu

    [autoit]

    GuiCtrlCreateInput

    [/autoit]

    und

    [autoit]

    GuiCtrlCreateButton

    [/autoit]

    besonders die Beipiele könnten helfen.

    Edit: eine InputBox wie von m-obi vorgechlagen tut es auch,

    mfg autoBert

  • So wäre dann das:

    [autoit]

    #include <File.au3>
    #include <String.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $sData = FileRead("config.xml")
    Global $aSB = _StringBetween($sData, '<PIDKEY Value="', '" />')

    [/autoit][autoit][/autoit][autoit]

    _ReplaceStringInFile("config.xml", $aSB[0], $sNewKey)

    [/autoit]
  • Allen vielen Dank für die Anregungen und Unterstützung.
    Ich selbst bin zwar trotz der Hilfen nicht zum gewünschten Erfol gekommen. Habe aber leider auch den Eindruck gewonnen, dass man nach drei Jahren Mitgliedschaft wohl zum alten Eisen gehören sollte. Dies ist bei mir nicht der Fall, da ich immer nur sporadisch Ideen mit AutoIt verwirklichen möchte und auch nicht aus der Programmierung komme.
    Ich schließe - auf wunsch - diesen Beitrag und hoffe irgendwo doch noch die für mich verständliche Lösung zu erhalten. Die Einzelpunkte sind mir schon klar, aber ich selbst schaffe es eben nicht ein Fenster zu programmieren, welches die "config.xml" öffnet, mir ein Editfeld zur verfügung stellt in dem ich den neuen Lizenzkey eintrage und über einen "Speichern"-Button den Key in den Bereich zwischen "<PIDKEY Value="" und "/>" schriebt.

  • Was ist daran so schwierig?

    [autoit]

    #include <File.au3>
    #include <String.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $sData = FileRead("config.xml")
    Global $aSB = _StringBetween($sData, '<PIDKEY Value="', '" />')

    [/autoit][autoit][/autoit][autoit]

    Global $sNewKey = InputBox("Installation", "Neuer Lizenzkey:", $aSB[0])

    [/autoit][autoit][/autoit][autoit]

    If $sNewKey <> "" Then _ReplaceStringInFile("config.xml", $aSB[0], $sNewKey)

    [/autoit]