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 = 'SpO2' then
myVitalSign.SPO2 := StrToIntDef(myNode.selectSingleNode('OBX.5').Text, 0)
else if myNode.selectSingleNode('OBX.3').Text = 'PR' then
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