AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML bearbeiten im VBScript (FinalBuilder)
Thema durchsuchen
Ansicht
Themen-Optionen

XML bearbeiten im VBScript (FinalBuilder)

Ein Thema von himitsu · begonnen am 1. Aug 2023 · letzter Beitrag vom 6. Okt 2023
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.381 Beiträge
 
Delphi 12 Athens
 
#4

AW: XML bearbeiten im VBScript (FinalBuilder)

  Alt 2. Aug 2023, 17:17
OK, vermutete du hattest da vielleicht selber schon damit gekämpft und entsprechend eine Lösung gefunden.


aktuell sieht es nun so aus
Code:
' in der Projektdatei die entsprechende Default-Config aktivieren (Release, Debug oder DebugOhneEurekalog)
function UpdateDefaultConfigInProjectFile(Action)
  File  = ExpandVarQuiet(Action.BuildFile)
  Config = FBVariables.MAKE_CONFIG

  set XML = CreateObject("Microsoft.XMLDOM")
  XML.preserveWhiteSpace = True
  XML.async = False
  if not XML.load(File) then call Err.Raise(1, "FinalBuilder", File + " not loaded : " + CStr(XML.parseError.errorCode) + " " + CStr(XML.parseError.reason))

  set Node = XML.selectSingleNode("//ItemGroup/BuildConfiguration[@Include='" + Config + "']")
  if Node is Nothing then
    Action.Echo "does NOT found Config '" + Config + "' in " + File
  else
    Action.Echo "found Config '" + Config + "' in " + File

    set Node = XML.selectSingleNode("//PropertyGroup/Config")
    if Node.text <> Config then
      Node.text = Config

      XML.preserveWhiteSpace = True ' sonst wird aus 4-Leerzeichen ein Tab, bei der Einrückung
      'if XML.save(File) <> 0 then call Err.Raise(1, "FinalBuilder", "write error")
      Text = XML.xml

      ' aus nachfolgenden <PostBuildEvent>&quot;$(root)\... wurde <PostBuildEvent>"$(root)\...
      ' im ersten <PostBuildEvent><![CDATA["$(root)\... ist und bleibt alles OK
      ' es funktioniert zwar dennoch, aber im GIT-Diff/Commit wäre es blöde
      Line = "<PostBuildEvent>&quot;$(root)\Build\dproj__compile_postbuild.cmd&quot; &quot;$(Config)&quot; &quot;$(Platform)&quot; &quot;$(OutputExt)&quot; &quot;$(InputDir)$(InputName)&quot; &quot;$(OutputDir)$(OutputName)&quot;"
      Text = Replace(Text, Replace(Line, "&quot;", """"), Line)
      Line = "<Debugger_Launcher>/usr/bin/xterm -e &quot;%debuggee%&quot;</Debugger_Launcher>"
      Text = Replace(Text, Replace(Line, "&quot;", """"), Line)

      ' innerhalb der Nicht-CDATA-PostBuildEvent wird vom Delphi nur CR gespeichert (nicht LF), aber überall sonst als CRLF
      Text = Replace(Text, vbCrLf + "</PostBuildEvent>", vbCr + "</PostBuildEvent>")

      ' Außerdem speichert Delphi inkl. UTF-8 BOM, aber XML.save tut das nicht
      set fh = CreateObject("ADODB.Stream")
      fh.Charset = "UTF-8"
      fh.Open
      fh.WriteText Text
      fh.SaveToFile File, 2   ' 2=adSaveCreateOverWrite
      fh.Close
    end if
  end if
end function
bzw. im alten XE-Script
Code:
    ' XE hatte alles um einen Tab eingerückt und eine Leerzeile am Ende ... also das für GIT nun wieder rein
    Text = vbTab + Replace(Text, vbLf, vbLf + vbTab)
    if Right(Text, 1) = vbTab then Text = Left(Text, Len(Text) - 1) ' Trim/RTrim entfernt keine Tabs/Zeilenumbrüche



Wobei ich ja eigentlich "nur" das machen wollte
Code:
' in der Projektdatei die entsprechende Default-Config aktivieren (Release, Debug oder DebugOhneEurekalog)
function UpdateDefaultConfigInProjectFile(Action)
  File  = ExpandVar(Action.BuildFile)
  Config = FBVariables.MAKE_CONFIG

  set XML = CreateObject("Microsoft.XMLDOM")
  if not XML.load(File) then call Err.Raise(1, "FinalBuilder", File + " not loaded : " + CStr(XML.parseError.errorCode) + " " + CStr(XML.parseError.reason))

  set Node = XML.selectSingleNode("//ItemGroup/BuildConfiguration[@Include='" + Config + "']")
  if Node is Nothing then
    Action.Echo "does NOT found Config '" + Config + "' in " + File
  else
    Action.Echo "found Config '" + Config + "' in " + File

    set Node = XML.selectSingleNode("//PropertyGroup/Config")
    if Node.text <> Config then
      Node.text = Config

      if XML.save(File) <> 0 then call Err.Raise(1, "FinalBuilder", "write error")
    end if
  end if
end function
Aber damit sich FinalBuilder, Delphi und Git nicht streiten und dann "Änderungen" zeigen, welche es garnicht gibt, bzw. es nicht sinnlos gegenseitig hin-&herkonvertieren ...........
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz