AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML ungültige Zeigeroperation

Ein Thema von ratmalwer · begonnen am 5. Jun 2023 · letzter Beitrag vom 5. Jun 2023
Antwort Antwort
ratmalwer

Registriert seit: 30. Nov 2020
15 Beiträge
 
#1

XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 13:44
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 14:11
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ratmalwer

Registriert seit: 30. Nov 2020
15 Beiträge
 
#3

AW: XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 15:49
Ich krieg das <item>....</item> nicht in den itemnode
bekomme den Fehler ungültige Zeigeroperaton
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 16: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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

Registriert seit: 30. Nov 2020
15 Beiträge
 
#5

AW: XML ungültige Zeigeroperation

  Alt 5. Jun 2023, 18:03
Danke himitsu

ohne Dich hätte ich das nie geschafft!

Schön dass es liebe, hilfsbereite Menschen gibt auf diesem Planet
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz