Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.553 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: IXMLDomDocument vs. IXMLDocument

  Alt 5. Mai 2020, 10:18
Ich glaube ich habe mich missverständlich ausgedrückt. Ich verwende derzeit IXMLDOMDocument und was so dazugehört. Ich möchte umstellen auf das plattformunabhängige IXMLDocument. Xpath ist wohl eher etwas was zu IXMLDOMDocument gehört? Zu einem XML mit allerlei für mich irrelevanten Tags außer allem was unter den mehrfachen <OBX> zu finden ist, hatte ich bisher eine Lösung nach diesem Schema (vereinfacht dargestellt):
Delphi-Quellcode:
function XML2Data(const RecvString: string): Boolean;
var
  myXML : IXMLDOMDocument;
  myNodeList : IXMLDOMNodeList;
  myNode : IXMLDOMNode;
  i : Integer;
  myVitalSign: TVitalSign;
begin
  Result := False;
  CoInitialize(nil);
  myXML := CoDOMDocument.Create;
  try
    try
      myXML.Load(RecvString);
      myNodeList := myXML.getElementsByTagName('OBX');
      if myNodeList.length > 0 then
      begin
        myVitalSign := TVitalSign.Create;
        for i := 0 to myNodeList.length - 1 do
        begin
          myNode := myNodeList.Item[i];
          if myNode.hasChildNodes then
          begin
            if myNode.selectSingleNode('OBX.3').Text = 'SpO2then
              myVitalSign.SPO2 := StrToIntDef(myNode.selectSingleNode('OBX.5').Text, 0)
            else if myNode.selectSingleNode('OBX.3').Text = 'PRthen
              myVitalSign.PR := StrToIntDef(myNode.selectSingleNode('OBX.5').Text, 0)
          end;
          Result := True;
        end;
      end;
    finally
      CoInitialize(nil);
    end;
  except
    Result := False;
  end;
end;
Jetzt möchte ich gerne plattformübergreifend werden. IXMLDocument und seine Nodes ist aber weitaus... unhandlicher als IXMLDOMDocument. Wie kann ich also eine Liste bestimmter Knoten analog zu getElementsByTagName finden und wie bekomme ich einen bestimmten Unterknoten analog zu selectSingleNode?

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat