Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 17:42
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Jun 2023 um 17:49 Uhr)
  Mit Zitat antworten Zitat