2010-01-19 106 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; 
相關問題