picoc getxmlvalue gibt kein null pointer zurück, wenn es nichts findet

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    picoc getxmlvalue gibt kein null pointer zurück, wenn es nichts findet

    Hallo Zusammen

    In der Doku (https://www.loxone.com/enen/kb/custo...g/#getxmlvalue) steht, das getxmlvalue ein null pointer zurückgibt, wenn es den gewünschten Parameter nicht findet.

    Bei meinen Versuchen bekomme ich in dem Fall jedoch ein Teil des xml strings zurück, welcher ab dem Zeichen beginnt das der Länge des Suchfeldes + 1 entspricht und enden nach dem nächsten "=".

    Code:
        int index = 0;
        char* p = localwebservice("data/status");
        char* serial = getxmlvalue(p,index,"Serial");
        while (serial != NULL){
            setoutputtext(0, serial);
            sleep(2000);
            free(serial);
            index++;
            serial = getxmlvalue(p,index,"Serial");
        }
        free(serial);
        free(p);
    Im Beispiel oben steht in p (siehe Problem unten)
    Code:
    <LL control="data/status" value="0" Code="404"/>
    und in serial steht nun "trol=" drin(len serial=6 + 1) anstatt das es NULL ist, wie es lauf doku sein müsste.


    Mache ich etwas falsch, oder hat der picoC intepreter von loxone hier ein Fehler?



    mein weiteres Problem ist, das
    localwebservice("data/status")
    nicht funtioniert.
    Es scheint, als müsse ich es mit httpget extern abrufen...
  • romildo
    Lebende Foren Legende
    • 25.08.2015
    • 5126

    #2
    Hallo,
    data/status
    listet alle Geräte inklusive Miniserver und deren Status.
    Meiner Meinung nach sollte eigentlich diese Anfrage daher nie NULL sein.

    Ich habe getxmlvalue mal mit einem vorhandenen Texteingang "testtext" und einem nicht vorhandenen Eingang "testtext1" nachgestellt.
    Hier das Ergebnis:
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: PicoC_getxmlvalue.png Ansichten: 1 Größe: 252,1 KB ID: 166471

    Wie oder ob es mit
    data/status
    funktioniert konnte ich auch nicht herausfinden.
    Zuletzt geändert von romildo; 01.09.2018, 14:52.
    lg Romildo

    Kommentar

    • Gast

      #3
      Hallo Romildo
      data/status funktioniert perfekt, wenn man es als externer request (z.B: im Browser macht). über die localwebservice funktion kommt da aber nix zurück, zumindest bei mir nicht.


      Dein test zeigt hier jedoch nur ein weiterer "Fehler" in der Funktion.
      Im xml ist ein "value" vorhanden, also darf die Antwort nicht NULL sein
      Bei dir müsste es eine leer string zurück geben.

      Um was es mir geht / was der Fehler ist welchen ich angesprochen habe ist:
      wenn du bei dir nun
      char* serial = getxmlvalue(p,verzeichnis,"foo");
      machen würdest, findet er kein xml attribute mit dem namen "foo" und müsste NULL zurück geben um das anzuzeigen, macht es aber eben nicht...


      Kommentar

      • romildo
        Lebende Foren Legende
        • 25.08.2015
        • 5126

        #4
        Zitat von swerder
        ...data/status funktioniert perfekt, wenn man es als externer request (z.B: im Browser macht). über die localwebservice funktion kommt da aber nix zurück, zumindest bei mir nicht...
        Dies ist bei mir auch so.

        ...Dein test zeigt hier jedoch nur ein weiterer "Fehler" in der Funktion.
        Im xml ist ein "value" vorhanden, also darf die Antwort nicht NULL sein
        Bei dir müsste es eine leer string zurück geben....
        Das sehe ich nicht so, da der Eingang testtext1 nicht vorhanden ist und es somit auch kein Feld value mit Inhalt gibt.

        ...Um was es mir geht / was der Fehler ist welchen ich angesprochen habe ist:
        wenn du bei dir nun
        char* serial = getxmlvalue(p,verzeichnis,"foo");
        machen würdest, findet er kein xml attribute mit dem namen "foo" und müsste NULL zurück geben um das anzuzeigen, macht es aber eben nicht...
        Das sehe ich auch so, kann aber sein, dass es Loxone anders sieht.
        Am einfachsten ist es wenn Du bei Loxone eine Suportanfrage machst.
        lg Romildo

        Kommentar

        Lädt...