如何使用delphi在xml文件中搜索和替换标记值?

win*_*ws7 5 xml tags delphi search replace

如何使用Delphi搜索和替换XML文件中的标记值?

我知道XML标签是什么,但是值是随机的,只需要重置为默认值,所以实际上我不能/不应该搜索值而只搜索标签.我也知道文件/文件的位置.

我是Delphi的新手,有人能为我提供一个如何做到这一点的简单示例吗?

先感谢您.

Phi*_*oss 9

我使用Delphi加载XML文件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;
Run Code Online (Sandbox Code Playgroud)


Leo*_*Leo 6

最好的可能是使用XML解析器,例如:


如果它是一个相当小的XML文件,您也可以只将XML加载到字符串(列表)中并使用正则表达式:

var
  Regex: TPerlRegEx;

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

您可以在此处获取TPerlRegex组件.


第三种方式包括手工完成所有脏工作,使用pos,deleteinsert.你必须找到开始和结束标记的两个pos'es和开放标记的>的pos,删除这两个索引之间的字符串,然后插入你的默认值(你必须迭代如果有多个匹配则匹配所有匹配项).不是我喜欢的方式;-)