Hallo Wissende,
ich weiss, es ist sicher einfach ohne Ende, aber ich parse folgenden
XML-String seit Ewigkeiten mit ner String-Funktion und will davon nun weg, finde aber leider keinen Weg. Ich weiss schon, dass ich mir wahrscheinlich ein
XML-Document erzeugen müsste und mich dann irgendwie durchhangeln muss.
So etwas in der Art erhalte ich:
<MatchStats id="MS004" matchid="ATP2008WG MS004" seq="118" msg="Return">
Bisher erhalte ich mit dieser Funktion den Inhalt aus den Attributen:
Delphi-Quellcode:
function GetAttributeValue(XMLContent,Attribute:String):String;
begin
if pos(Attribute,XMLContent)<>0 then
begin
Delete(XMLContent,1,pos(Attribute,XMLContent)+length(Attribute)+1);
if pos('"',XMLContent)<>0 then
Delete(XMLContent,pos('"',XMLContent),length(XMLContent));
Result:=XMLContent;
end;
end;
Aufgerufen wird das bisher so:
ed_msg.Text := GetAttributeValue(XMLContent,'msg');
In dem Edit würde dan Return stehen.
Ich habe nun folgendes versucht, aber meine
XML-Kenntnisse sind so Grotte, dass mich das nicht wirklich zum Ziel führt.
Delphi-Quellcode:
function GetXmlAttribute(XMLContent, str_Attr : String):String;
var
MyXml : IXMLDOMDocument2;
Attributes : IXMLDOMNodeList;
i : integer;
begin
MyXml := CoDOMDocument40.Create;
MyXml.setProperty('NewParser', true);
MyXml.loadXML(XMLContent);
Attributes := MyXml.documentElement.selectNodes('MatchStats');
for i:=0 to Attributes.length -1 do
if Attributes.item[i].selectSingleNode(str_Attr).nodeName = str_Attr then
Result := Attributes.item[i].selectSingleNode(str_Attr).text;
end;
Könnte mir bitte jemand unter die Arme greifen und einen Tipp geben. Ich will die andere Funktion ersetzen, damit ich nicht so viel im QuellCode ändern muss. Deshalb sollten die übergebenen Parameter auch so bleiben. Den Funktionsnamen kann ich später dann noch anpassen.