Erstmal, laß das
XMLDoc.Active:=
weg,
denn LoadFromXML erledigt es bereits. (nochmal setzen kann den Inhalt löschen, weil Interfacereferenzen und so, siehe nachfolgend)
dann
XMLDoc: IXMLDocument;
anstatt
TXMLDocument,
denn sonst bleibt RefCount auf 0 und wird die letzte
Node-Referenz gelöscht, ist alles weg.
Delphi-Quellcode:
XMLDoc := TXMLDocument.Create(nil); // XMLDoc = TXMLDocument
XMLDoc.LoadFromXML(CurrentTrackMetadata);
ItemNode := xmlDoc.DocumentElement; // RecCount geht auf 1
ItemNode := xmlDoc.DocumentElement; // vor dem Ausführen wird die Interfacevariable auf nil gesetzt (Platz für neue Zuweisung), das ganze xmlDoc verschwindet gleich mit und xmlDoc.Irgendwas knallt
...
bzw.
Delphi-Quellcode:
XMLDoc := TXMLDocument.Create(nil); // XMLDoc = TXMLDocument
XMLDoc.LoadFromXML(CurrentTrackMetadata);
ItemNode := xmlDoc.DocumentElement; // RecCount geht ...
ItemNode := ItemNode.ChildNodes[0]; // vor dem Ausführen wird ...
...
Delphi-Quellcode:
var
ItemNode, Itemnode2: IXMLNode;
XMLDoc: IXMLDocument;
//TXMLDocument;
i, j: Integer;
begin
XMLDoc := TXMLDocument.Create(
nil);
XMLDoc.LoadFromXML(CurrentTrackMetadata);
ItemNode := xmlDoc.DocumentElement;
// DIDL-Lite
ItemNode := ItemNode.ChildNodes[0];
// Item
for I := 0
to ItemNode.ChildNodes.Count-1
do begin
Itemnode2 := ItemNode.ChildNodes[i];
// dc:title usw.
if (ItemNode2.GetNodeName = '
upnp:album')
and (itemNode2.Text > '
')
then
Playalbum := itemNode2.Text;
if (ItemNode2.GetNodeName = '
upnp:artist')
and (itemNode2.Text > '
')
then
Playartist := itemNode2.Text;
end;
//XMLDoc := nil;
end;