如何使用Delphi在XML文件中搜索和替换标记值?如何使用delphi在xml文件中搜索和替换标签值?
我知道XML标签是什么,但该值是随机的,只需要重置为默认值,所以实际上我不能/不应该搜索值,但只能搜索标签。 我也知道文件/文件的位置。
我是德尔福的新手,有人可以提供一个简单的例子来说明如何做到这一点吗?
预先感谢您。
如何使用Delphi在XML文件中搜索和替换标记值?如何使用delphi在xml文件中搜索和替换标签值?
我知道XML标签是什么,但该值是随机的,只需要重置为默认值,所以实际上我不能/不应该搜索值,但只能搜索标签。 我也知道文件/文件的位置。
我是德尔福的新手,有人可以提供一个简单的例子来说明如何做到这一点吗?
预先感谢您。
最好的可能性是使用XML解析器,例如:
如果它是一个相当小的XML文件,你也可以只加载XML转换成字符串(列表)并使用正则表达式:
var
Regex: TPerlRegEx;
Regex := TPerlRegEx.Create(nil);
Regex.RegEx := '<yourtag>.*?</yourtag>';
Result := objRegEx.Replace(inputString, replacementString, true);
你可以得到TPerlRegex组件here 。
第三种方式将包括手工做所有的脏活,使用pos,delete和insert。你必须找到开始和结束标记的两个pos's和开始标记的> pos),删除这两个索引之间的字符串,然后插入默认值(并且必须迭代如果有多个事件发生,则全部匹配)。不是我喜欢的方式;-)
我会使用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;
正则表达式通常有缺点,他们不拿基础文本格式的picularities考虑(比如,看财富“验证的电子邮件地址,使用正则表达式” )。所以,我建议你先把XML Parser的可能性放在你的答案中。 – 2010-01-19 11:04:50
我同意......完成。 – Leo 2010-01-19 11:50:44
+1;感谢您的编辑。 – 2010-01-19 17:00:47