Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Attribute in XML suchen und ausgeben...Wie?

  Alt 12. Feb 2008, 16:29
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.
Danke
Tom
  Mit Zitat antworten Zitat