AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi XML : Zeile überschreiben -> schreibt komplette Datei neu
Thema durchsuchen
Ansicht
Themen-Optionen

XML : Zeile überschreiben -> schreibt komplette Datei neu

Ein Thema von Freyr77 · begonnen am 11. Nov 2016 · letzter Beitrag vom 14. Nov 2016
Antwort Antwort
Freyr77
(Gast)

n/a Beiträge
 
#1

XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 11. Nov 2016, 15:44
Delphi-Version: 10 Seattle
Delphi-Quellcode:
var
  lNodeHelper: TNodeHelper;
  lXMLDocument: IXMLDocument;
  lTmpNode: IXMLNode;
  lTmpOutput: string;
  iCounter: integer;
  lnewProductVersion: string;
  lChkBox: TGridCheckbox;

begin
  if MessageDlg
    ('Die veränderten Daten werden fest gespeichert, wollen Sie fortfahren?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    for iCounter := 1 to fProjectListItems.Count do
    begin
      lChkBox := gridDataSet.Objects[PROJ_CHECKBOXES, iCounter]
        AS TGridCheckbox;

      if Assigned(lChkBox) AND lChkBox.Checked then
      begin
        lNodeHelper := gridDataSet.Objects[PROJ_NODEHELPER, iCounter]
          AS TNodeHelper;
        lXMLDocument := lNodeHelper.FDocument;
        lTmpNode := lNodeHelper.FNode;
        lTmpOutput := lTmpNode.NodeValue;

        lnewProductVersion := XMLHandle.getNewProductVersion('ProductVersion',
          lTmpOutput, gridDataSet, iCounter);
        lTmpNode.NodeValue := XMLHandle.getNewFileVersion('FileVersion',
          lnewProductVersion, gridDataSet, iCounter);

        lXMLDocument.SaveToFile(fProjectListItems[iCounter - 1]);
      end;
    end;
  end
  else
    Exit;

  ShowMessage('Die Änderungen wurden erfolgreich übernommen.');
end;
Ich möchte mit diesem Code XMLs von .pas-Dateien überschreiben. Und zwar nur eine bestimmte Zeile mit einem bestimmten Knoten(<>blablabla</> - sowas..). Dort werden über das Programm die Datei- und Produktversionen aktualisiert. Das funktioniert auch alles wie es soll.

Wenn ich allerdings in Git Extensions auf die Änderungen schau, ist der komplette Text ersetzt worden. Zwar stimmt trotzdem was eingetragen wurde, es ist aber nicht gewollt das der Code immer die komplette Datei überschreibt.

Weiß jemand zufällig woran das liegen kann?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 11. Nov 2016, 15:57
Weiß jemand zufällig woran das liegen kann?
Ja!
lXMLDocument.SaveToFile schreibt immer die komplette Datei, d.h. den kompletten Baum als XML-Textdatei.
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#3

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 11. Nov 2016, 15:59
Weiß jemand zufällig woran das liegen kann?
Ja!
lXMLDocument.SaveToFile schreibt immer die komplette Datei, d.h. den kompletten Baum als XML-Textdatei.
DANKE! Ich hab mich wirklich krumm gesucht.

Kannst du mir zufällig auch sagen wie ich das korrekterweise ändern muss? Oder ist das nicht so einfach möglich?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 11. Nov 2016, 16:05
Ne, das wird so nicht gehen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 11. Nov 2016, 19:55
Was heißt "komplette Datei geändert"?

Wenn du willst, dass es gleich aussieht, dann mußt du in der selben Formatierung speichern,
oder die Datei danach halt nochmal entsprechend umformatieren.
* Einrückung
* Zeilenumbrüche
* ...


Alternativ solltest du eben keinen Text-DIFF versenden, sondern einen XML-Diff, denn dann wird die Datei inhaltlich verglichen und nicht Zeilenweise, was sogesehn bei XMLs auch 'ne leicht blöde Idee ist.
$2B or not $2B
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#6

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 14. Nov 2016, 11:20
Das Problem ist genau gesagt, dass er zwar alles richtig überschreibt, aber folgendes macht:

<Project xmlns="">
<PropertyGroup>
<ProjectGuid>{blabla}</ProjectGuid>

Im Original sind es zur Trennung der "Knoten" vor dem Text jeweils 4 Leerzeichen. Also vor der PropertyGroup habe ich 4 Leerzeichen, vor der ProjectGuide habe ich 8 Leerzeichen.

Im überschriebenen Zustand habe ich aber vor Property Group einen Tab, und vor Project Guide 2 Tabs.

Ich brauch also nur die Beibehaltung der Leerzeichen damit es passt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 14. Nov 2016, 11:45
Was machst Du denn mit der Datei, dass Du auf die korrekten Whitespaces achten musst? Normalerweise sollten die keine Rolle spielen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#8

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 14. Nov 2016, 12:25
Was machst Du denn mit der Datei, dass Du auf die korrekten Whitespaces achten musst? Normalerweise sollten die keine Rolle spielen.
Ich verändere Versions - und Produktnummer. Ich hab selbst keine Ahnung warum das so sein muss.

Ich hab es jetzt mal mit:

lXMLDocument.XML.Text := xmlDoc.FormatXMLData(lXMLDocument.XML.Text); probiert.

Allerdings sagt er mir dann "kein Dokument aktiv".
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 14. Nov 2016, 12:28
Auszug aus einer meiner Sourcen:
Delphi-Quellcode:
  Doc.XML.Text := XMLDoc.FormatXMLData(Doc.XML.Text);
  (* Nach dem Formatieren wieder aktiv setzen, sonst Exception!! *)
  Doc.Active := true;
  Doc.SaveToStream(Stream);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#10

AW: XML : Zeile überschreiben -> schreibt komplette Datei neu

  Alt 14. Nov 2016, 13:12
Auszug aus einer meiner Sourcen:
Delphi-Quellcode:
  Doc.XML.Text := XMLDoc.FormatXMLData(Doc.XML.Text);
  (* Nach dem Formatieren wieder aktiv setzen, sonst Exception!! *)
  Doc.Active := true;
  Doc.SaveToStream(Stream);
Ja, so funktioniert es.

Leider formatiert er mir wieder "Tabs" rein anstatt die Leerzeichen. Was wohl daran liegt, dass es so Standardmäßig auch sein soll.

Ziel ist es übrigens, dass man in GIT-Extensions bei den Änderungen nur sieht, was genau geändert wurde, und nicht die komplette Datei einmal rot und einmal grün.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz