Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XML ungültige Zeigeroperation (https://www.delphipraxis.net/213150-xml-ungueltige-zeigeroperation.html)

ratmalwer 5. Jun 2023 13:44

XML ungültige Zeigeroperation
 
Hallo

ich versuche ein kleines XML auszuwerten, kriges einfach nicht auf die Reihe...

XML: (CurrentTrackMetadata)
Code:
<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">
   <item>
      <dc:title>Elvin Sir Jones</dc:title>
      <upnp:artist>McCoy Tyner</upnp:artist>
      <upnp:album>Trident</upnp:album>
      <res duration="0:05:22" protocolInfo="http-get:*:audio/mpeg:*">http://192.168.1.100:9000/disk/DLNA-PNMP3-OP01-FLAGS01700000/music/O0$1$7I15333/Elvin%20Sir%20Jones.mp3</res>
   </item>
</DIDL-Lite>
Script:
Code:
Procedure TAVTransportService.SplitTrackMetadata;
VAR ItemNode, Itemnode2 : IXMLNode;
    XMLDoc:TXMLDocument;
    i,j : integer;
begin
    XMLDoc:=TXMLDocument.Create(nil);
    XMLDoc.Active:=false;
    XMLDoc.LoadFromXML(CurrentTrackMetadata);
    XMLDoc.Active:=True;

       //ItemNode := XMLDoc.DocumentElement.ParentNode; //Item Parent oder Document ???
       ItemNode := xmlDoc.DocumentElement;
        for I := 0 to ItemNode.ChildNodes.Count-1 do begin
            Itemnode2 := ItemNode.ChildNodes[i];

            if (ItemNode2.GetNodeName = 'upnp:album') and (itemNode2.Text > '') then begin
            Playalbum := itemNode2.Text;
            end;

            if (ItemNode2.GetNodeName = 'upnp:artist') and (itemNode2.Text > '') then begin
            Playartist := itemNode2.Text;
            end;

        end;

   XMLDoc.Free;
end;
Bin am verzweifeln... :pale:

himitsu 5. Jun 2023 14:11

AW: XML ungültige Zeigeroperation
 
DocumentElement ist das Rootelement DIDL-Lite,

davon das ParentElement wäre dann das Dokument "XMLDoc" selbst und dessen Child dann DIDL-Lite.



Und was ist nun das Problem?

ratmalwer 5. Jun 2023 15:49

AW: XML ungültige Zeigeroperation
 
Ich krieg das <item>....</item> nicht in den itemnode
bekomme den Fehler ungültige Zeigeroperaton

himitsu 5. Jun 2023 16:42

AW: XML ungültige Zeigeroperation
 
Erstmal, laß das
Delphi-Quellcode:
XMLDoc.Active:=
weg,
denn LoadFromXML erledigt es bereits. (nochmal setzen kann den Inhalt löschen, weil Interfacereferenzen und so, siehe nachfolgend)

dann
Delphi-Quellcode:
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;

ratmalwer 5. Jun 2023 18:03

AW: XML ungültige Zeigeroperation
 
Danke himitsu

ohne Dich hätte ich das nie geschafft!

Schön dass es liebe, hilfsbereite Menschen gibt auf diesem Planet :!:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz