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

5

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

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

作为Delphi的新手,有人可以为我提供一个简单的示例吗?

提前感谢您。

2个回答

9

我会使用Delphi的IXMLDocument加载XML文件,并使用该文档替换元素。代码如下:

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

最好的选择是使用一个XML解析器,例如:


如果XML文件比较小,您也可以将XML加载到字符串(列表)中并使用正则表达式进行处理。
var
  Regex: TPerlRegEx;

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

您可以在这里获取TPerlRegex组件。


第三种方法将包括手动完成所有繁琐的工作,使用 pos, deleteinsert。您需要找到开头和结尾标记的两个位置以及 > 的位置(对于开头标记),删除这两个索引之间的字符串,并在其后插入默认值(如果有多个匹配项,则必须遍历所有匹配项)。这不是我喜欢的方式;-)

1
正则表达式通常的缺点是它们不考虑底层文本格式的特点(例如,查看“使用正则表达式验证电子邮件地址”的丰富性)。因此,我建议您首先在回答中提供XML解析器的可能性。 - Jeroen Wiert Pluimers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接