5 Stimmen

Wie kann man den Wert eines Tags in einer XML-Datei unter Verwendung von Delphi suchen und ersetzen?

Wie kann man mit Delphi einen Tag-Wert in einer XML-Datei suchen und ersetzen?

Ich weiß, was das XML-Tag ist, aber der Wert ist zufällig und muss einfach auf einen Standardwert zurückgesetzt werden, daher kann ich in Wirklichkeit nicht/sollte nicht nach dem Wert suchen, sondern nur nach dem Tag. Ich kenne auch den Ort der Datei/Dateien.

Ich bin neu in Delphi, kann mir jemand ein einfaches Beispiel geben, wie dies gemacht werden könnte?

Vielen Dank im Voraus.

9voto

Phil Ross Punkte 24282

Ich würde die XML-Datei mit IXMLDocument in Delphi laden und das Dokument verwenden, um das Element zu ersetzen. Etwas in dieser Art:

uses
  XMLDoc,
  XMLIntf;

procedure ChangeTag(const filename : String);
var
  doc : IXMLDocument;
  parent : IXMLNode;
  toReplace : IXMLNode;
  replacement : IXMLNode;
begin
  doc := LoadXMLDocument(filename);

  parent := doc.DocumentElement.ChildNodes.FindNode('parent');
  toReplace := parent.ChildNodes.FindNode('toReplace');

  replacement := doc.CreateElement('replacement', '');
  replacement.Text := toReplace.Text;

  parent.ChildNodes.ReplaceNode(toReplace, replacement);

  doc.SaveToFile(filename);
end;

6voto

Leo Punkte 36757

Die beste Möglichkeit besteht darin, einen XML-Parser zu verwenden, zum Beispiel:


Wenn es sich um eine eher kleine XML-Datei handelt, könnten Sie die XML auch einfach in einen String (Liste) laden und eine reguläre Ausdruck verwenden:

var
  Regex: TPerlRegEx;

Regex := TPerlRegEx.Create(nil);
Regex.RegEx := '.*?';
Result := objRegEx.Replace(inputString, replacementString, true);

Sie können die TPerlRegex-Komponente hier bekommen.


Der dritte Weg würde darin bestehen, die ganze "dreckige Arbeit" von Hand zu erledigen, indem man pos, delete und insert verwendet. Sie müssten die beiden posen des Öffnungs- und Endtags sowie den pos des > für den Öffnungstag finden, den string zwischen diesen beiden Indizes löschen und Ihren Standardwert danach einfügen (und Sie müssten über alle Übereinstimmungen iterieren, wenn es mehr als eine gibt). Nicht der Weg, den ich bevorzugen würde ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X