ASCII in STRING umwandeln, um Werte aus einer XML-Datei auszulesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Um es besser zu verstehen gliedere ich es hier nochmal auf:
--> <e2service>
<e2servicereference> WERT 1 </e2servicereference> in dieser Zeile ist der erste Wert unterhalb der Überschrift mit dem aufgeklappten Pfeil
<e2servicename> WERT 2 </e2servicename> in dieser Zeile ist der zweite Wert unterhalb der Überschrift mit dem aufgeklappten Pfeil​

Du darfst nur die unterste Ebene, da wo direkt die Daten stehen in die Liste aufnehmen, also nur <e2servicereference> und <e2servicename>, nicht <e2service>

Gruß
 
@Thruser

Du darfst nur die unterste Ebene, da wo direkt die Daten stehen in die Liste aufnehmen, also nur <e2servicereference> und <e2servicename>, nicht <e2service>

Das habe ich doch gemacht, siehe Bild "Receiver_XML_GesuchteWerte".

Jedoch wird beim gesuchtem Wert "e2sercivename" als Ausgabe "$N$T" ausgegeben und nicht "ZDF HD".
Habe noch umfangreichere XML-Dateien zum Receiver, siehe Anhang.

Bild:

Umfangreiche-XML-Datei.JPG

P.S.: Wie kann ich hier Dateien einfügen?


Gruß Lex
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich doch gemacht, siehe Bild "Receiver_XML_GesuchteWerte".

Nö:
e2service.PNG

Das e2service muß da weg.

Habe noch umfangreichere XML-Dateien zum Receiver, siehe Anhang.
P.S.: Wie kann ich hier Dateien einfügen?
Du mußt in den erweiterten Editor, nicht unten direkt antworten sondern erst auf erweitert klicken, dann ist dort eine Büroklammer.

Gruß
 
Habe die zwei XML-Dateien vom Receiver in den Anhang getan.


Wegen dem Wert "e2servicename" habe ich dir jetzt nochmal im Onlinemodus ein Bild angehängt. Ich wollte mit dem vorherigem Bild zeigen das bei allen drei Varianten nur die erste mit "e2service" etwas ausgespuckt hat.

Bild:
e2servicename_alleinstehend.jpg

P.S.: Zum Thema TON-Baustein, diese Variante von dir funktioniert leider nicht. Wie im Bild "TON-Baustein" zu sehen verbleibt die Steuerung in diesem Zustand permanent. Wird auf den Visu_Button (Taster) gedrückt passiert auch nichts mehr.

TON-Baustein.jpg




Gruß
 

Anhänge

  • XML-Dateien.rar
    865 Bytes · Aufrufe: 27
Zuletzt bearbeitet:
Hallo,

zum TON, Du mußt noch die Variable am xTrigger Eingang des FbHTTP_Get Bausteins ändern zu Trigger_Denon_... Außerdem hast Du die Invertierung am Eingang des Timers übersehen.

Zum Hochladen: xml in txt umwandeln oder packen zur Zip Datei. Zip und txt nimmt das Board glaube ich an.

Das andere muß ich mir erst ansehen. Muß ich wohl doch meinen 8204 rausholen. Eventuell weiß KML auf die schnelle rat.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, ich weiß jetzt woran es liegt. Bei Deinem ersten Satz Daten sind die Werte in einem Child-Item (value) gespeichert. Bei den neuen Daten sind sie direkt enthalten.

Eventuell funktioniert folgendes dafür (Achtung neue Funktion):
Code:
FUNCTION FC_GetXmlValueMulti2 : ARRAY[1..10] OF STRING(20)


VAR_INPUT
    pabRxBuffer        : POINTER TO ARRAY[1..500] OF BYTE;
    udiRxNByte        : UDINT;
    asAttributeName    : ARRAY[1..10] OF STRING;
END_VAR




VAR
    udiIdx            : UDINT;
    pbChar            : POINTER TO BYTE;
    psChar            : POINTER TO STRING(1);
    sChar            : STRING(1);
    sTmp            : STRING;
    xStart, xStartM, xEnd, xIgnor, xFound, xCopyValue    : BOOL;
    iFoundIdx            : INT;
    i                : INT;
END_VAR
Code:
FOR i := 1 TO 10 DO
    FC_GetXmlValueMulti2[ i ] := 'attribute not found';
END_FOR
pbChar := pabRxBuffer;




FOR udiIdx := 1 TO udiRxNByte +1 DO


    xIgnor :=pbChar^ = 16#2F;    (* '/' *)
    xStartM := pbChar^ = 16#3C;    (* '<' *)
    xEnd := (pbChar^ = 16#3E) OR (xStartM AND xFound);    (* '>' *)


    IF (xStart OR xFound) AND NOT xEnd AND NOT xIgnor THEN
        psChar := pbChar;
        IF pbChar^ = 16#0 THEN EXIT; END_IF    (* EOF string *)
        sChar := psChar^;
        sTmp := CONCAT(sTmp, sChar);
    ELSIF xEnd THEN
        IF xFound THEN
            FC_GetXmlValueMulti2[ iFoundIdx ] := sTmp;
            xFound := FALSE;
        ELSE
            FOR i := 1 TO 10 DO
                 IF (sTmp = asAttributeName[ i ]) AND (asAttributeName[ i ] <> '') THEN
                    xFound := TRUE;
                    iFoundIdx := i;
                    EXIT;
                END_IF
            END_FOR
        END_IF
        sTmp := '';
    END_IF


    xStart := (xStart OR xStartM) AND NOT xEnd AND NOT xIgnor;
    pbChar := pbChar +1;
END_FOR
Das ist aber noch nicht getestet.

Gruß

NACHTRAG: Bei den umfangreichen XML Antworten wirst Du aber in neue Probleme laufen. Da macht der folgene Abschnitt Probleme:
Code:
        <e2tunerinfo>
            <e2nim>
                <name>Tuner A</name>
                <type>BCM7346 (internal) (DVB-S2)</type>
            </e2nim>
            <e2nim>
                <name>Tuner B</name>
                <type>BCM7346 (internal) (DVB-S2)</type>
            </e2nim>
            <e2nim>
                <name>Tuner C</name>
                <type>Si2168 (DVB-T2)</type>
            </e2nim>
        </e2tunerinfo>
Da wirst Du mit name und Type nur Tuner C, sowie Si2168(DVB-T2) bekommen.

/EDIT: Fehlendes THEN hinzugefügt, der vollständigkeit halber
 
Zuletzt bearbeitet:
Moin, ich meinte es so ... (sorry, hab daheim nur CDS 2.3 und CFC ist da schon ein Krampf. Die Implementierung in e!C ist ohne die Shortcuts ja noch schlimmer)

CFC_Trigger.png
Edit: Hab mir grad die Lösung von Thruser angeschaut. Geht auch. Viele Wege führen ...
 
Zuletzt bearbeitet:
Also die Antwort ging echt schnell Thruser und dann noch direkt mit einem neuem Code. Auch an dir ein Danke KLM. Habe den neuen Code bereits implementiert, jedoch wird an einer Stelle gemeckert, siehe Bild.

Fehler_FC_GetXmlValueMulti2.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit dem anderen Format, kann mein erster Praser gar nicht verwendet werden, bzw. müsste umgebaut werden. Der schaut in der ersten Version auf ein "<", hängt alle folgenden Zeichen in einen temporären Sting zusammen und wenn ein ">" kommt, vergleicht die Funktion den temporären Sting mit den gesuchten Attributen. Ist ein Attribut gefunden wird die folgende Kombinatin "<xxx>" (hier immer "<value>") ignoriert und das ">" von "<xxx>" als Startzeichen zum einlesen des Wertes genutzt. Ein folgendes "<" beendet den Zusammenbau des Wertes.
Ob die Anpassung von Thruser für die neue Formatierung passt, sollte sich ja schnell ausprobieren lassen ....
 
Die Fehlermeldung ist doch eindeutig. Der Compiler erwartet "IF <Boolscher Ausdruck> THEN <Anweisung 1>; <Anweisung n>; END_IF. Soll heißen, Du hast das THEN vergessen.
 
Habe ich bereits KLM, jedoch wie bereits in einem Post zuvor mit einem kleinem Fehler ;-)
Haben anscheinen parallel geschrieben.

Nachtrag:

Ich haben den neuen CODE korrigiert und mit Erfolg getestet. Funktioniert einwandfrei.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es funktioniert alles wunderbar.
Wenn ihr zwei Spezialisten auf noch eine Modifikation Lust hättet, könntet ihr mir gerne nochmals helfen ;-)
Ich habe es selbst versucht euer Programm umzumodifizieren, doch ohne Erfolg.
Es geht um folgendes:

Bei meiner Türkommunikation möchte ich gerne die Zustände gewisser Kontakte überprüfen. Somit ist es das selbe Verfahren wie zuvor, jedoch sind die Zeichen bei diesen XML-Daten anders, siehe folgendes Dokument.

https://www.google.de/url?sa=t&sour...FjAAegQIARAB&usg=AOvVaw39qf6jFTeLcgeRbWLqpR86

In diesem PDF sind hauptsächlich nur die Kapitel 5.9 (Switch-Status) und Kapitel 5.15 (Call-Status) für mich interessant. Ebenso sind in diesen Kapiel die ausgeworfenen XML-Daten abgebildet. Zu beiden Kapitel würden mich wieder die jeweiligen Ergebnisse interessieren... doch leider schaffe ich es nicht diese wieder heraus zu filtern.


Gruß Lex
 
Zuletzt bearbeitet:
Hi,

das ist kein XML sondern JSON. Da sind die Daten anders strukturiert.

Und wie willst Du die Daten abfragen? Für jeden Schalter einzeln oder gesammelt, also nur /api/switch/status oder /api/switch/status&switch=1, denn dadurch ändert sich auch die Ausgabe.

Würde frühestens morgen dazu kommen mir das mal weiter anzusehen.

Gruß
 
Hi Thruser,

tut mir leid mit dem Datenformat... hatte mich verschrieben und nicht nachkontrolliert. Also ich wprde es gerne am liebsten haben wenn jeder switch einzeln. Ebenso wäre auch sehr wichtig die Statuse aus dem Kapitel 5.15 zu bekommen.

D.h. jeden Parameter für sich:
session = call identifier
Direkten = Call direction (incoming, outgoing)
State = Call state (connecting, ringin, connected)

Vielen lieben dank schon einmal Thruser!!!
 
Vergiss es, Du bist ja bei e!C. Aber JSON Bibliothek hab ich da auch schon gesehen. Such einfach nach dem Stichwort "json" im Bibliotheksverwalter und frag beim Support, wenn es noch nich im aktuellen 1.4er Release enthalten ist. Hab ich schon gesehen, muss also min. als Beta schon verfügbar sein.
 
Hall,

bin noch nicht dazu gekommen. Wollte jetzt anfangen.

@KLM
hab schon bei den mitgelieferten Bibliotheken gesucht, aber nichts gefunden. Gerade wegen Iot, Cloud und MQTT dachte ich, da gäbe es was. Er findet nur etwas mit JSON bei WagoAppWeatherForecast, aber nichts was man nutzen kann.
Deine lib kann man leider auch nicht importieren, da fehlt das Paßwort. Aber vielleicht kann man sich da etwas von der Beschreibung akupfern.

Gruß
 
Zurück
Oben