2010-01-19 65 views
5

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

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

我是德尔福的新手,有人可以提供一个简单的例子来说明如何做到这一点吗?

预先感谢您。

回答

6

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


如果它是一个相当小的XML文件,你也可以只加载XML转换成字符串(列表)并使用正则表达式

var 
    Regex: TPerlRegEx; 

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

你可以得到TPerlRegex组件here


第三种方式将包括手工做所有的脏活,使用posdeleteinsert。你必须找到开始和结束标记的两个pos's和开始标记的> pos),删除这两个索引之间的字符串,然后插入默认值(并且必须迭代如果有多个事件发生,则全部匹配)。不是我喜欢的方式;-)

+1

正则表达式通常有缺点,他们不拿基础文本格式的picularities考虑(比如,看财富“验证的电子邮件地址,使用正则表达式” )。所以,我建议你先把XML Parser的可能性放在你的答案中。 – 2010-01-19 11:04:50

+0

我同意......完成。 – Leo 2010-01-19 11:50:44

+0

+1;感谢您的编辑。 – 2010-01-19 17:00:47

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; 
相关问题