Как найти и заменить значение тега в XML-файле с помощью Delphi? - PullRequest
5 голосов
/ 19 января 2010

Как найти и заменить значение тега в файле XML с помощью Delphi?

Я знаю, что такое тег XML, но значение является случайным, и его просто необходимо сбросить до значения по умолчанию, поэтому в действительности я не могу / не должен искать значение, а только тег. Я также знаю местоположение файла / файлов.

Я новичок в Delphi, кто-нибудь может дать мне простой пример того, как это можно сделать?

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 19 января 2010

Я бы загрузил XML-файл, используя Delphi IXMLDocument, и использовал бы документ для замены элемента. Как то так:

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;
6 голосов
/ 19 января 2010

Лучшей возможностью является использование XML-парсера , например:


Если это довольно небольшой XML-файл, вы также можете просто загрузить XML в строку (список) и использовать регулярное выражение :

var
  Regex: TPerlRegEx;

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

Вы можете получить компонент TPerlRegex здесь .


Третий способ будет включать выполнение всей грязной работы вручную , используя pos , удалить и вставить .Вам нужно будет найти две позиции открывающего и конечного тега и позицию> для тега openeing), удалить строку между этими двумя индексами, а затем вставить значение по умолчанию (и вам придется перебиратьвсе совпадения, если есть более одного вхождения).Не так, как я бы предпочел; -)

...