2010-01-19 14 views
5

Delphi kullanarak XML dosyasında bir etiket değeri nasıl bulunur ve değiştirilir?Delphi'yi kullanarak xml dosyasında bir etiket değeri nasıl bulunur ve değiştirilir?

XML etiketinin ne olduğunu biliyorum, ancak değer rastgele ve basit bir şekilde varsayılan bir değere sıfırlanması gerekiyor, bu nedenle, gerçekte değeri değil, yalnızca etiketi arayamıyorum/aramamalıyım. Ayrıca dosya/dosyaların yerini biliyorum.

Delphi'ye yeniyim, biri bana bunun nasıl yapılabileceğine dair basit bir örnek verebilir mi?

Önceden teşekkür ederiz. Örneğin

cevap

6

iyi ihtimal bir XML çözümleyici kullanıyor:


o oldukça küçük bir XML dosyası ise, ayrıca sadece bir dize (listede) içine XML yüklemek ve bir düzenli ifade kullanabilirsiniz:

var 
    Regex: TPerlRegEx; 

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

Sen TPerlRegex bileşenini alabilirsiniz here .


üçüncü yol, elle bütün kirli işlerini yapıyor pos, delete ve insert kullanarak içerecektir. Açılış ve bitiş etiketinin iki posdesini ve openeing etiketi için> pos değerini bulmanız gerekecek, bu iki dizin arasındaki dizgeyi silecek ve daha sonra varsayılan değerinizi ekleyeceksiniz (ve bunu tekrarlamak zorunda kalacaksınız). Birden fazla olay varsa tüm eşleşmeler). Tercih ettiğim gibi değil ;-)

+1

düzenli ifadeler genellikle bunlar örneğin (hesaba yatan metin biçimi picularities yapmayız dezavantajı var zenginliğine bakmak "doğrulamak-posta adresi-regex kullanarak"). Bu yüzden, önce XML Ayrıştırıcı olasılığını sizin cevabınıza koymanızı öneririm. –

+0

Kabul ediyorum ... bitti. – Leo

+0

+1; Düzenleme için teşekkürler. –

9

XML dosyasını Delphi IXMLDocument kullanarak yüklerim ve belgeyi kullanarak öğeyi değiştiririm. Böyle bir şey:

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; 
İlgili konular