![]() |
Delphi-Version: 10 Seattle
XML : Zeile überschreiben -> schreibt komplette Datei neu
Delphi-Quellcode:
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.
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; 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? |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Zitat:
lXMLDocument.SaveToFile schreibt immer die komplette Datei, d.h. den kompletten Baum als XML-Textdatei. |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Zitat:
Kannst du mir zufällig auch sagen wie ich das korrekterweise ändern muss? Oder ist das nicht so einfach möglich? |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Ne, das wird so nicht gehen.
|
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
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. |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
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. |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Was machst Du denn mit der Datei, dass Du auf die korrekten Whitespaces achten musst? Normalerweise sollten die keine Rolle spielen.
|
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Zitat:
Ich hab es jetzt mal mit:
Delphi-Quellcode:
probiert.
lXMLDocument.XML.Text := xmlDoc.FormatXMLData(lXMLDocument.XML.Text);
Allerdings sagt er mir dann "kein Dokument aktiv". |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
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); |
AW: XML : Zeile überschreiben -> schreibt komplette Datei neu
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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