Ich erweiter dann auch nochmal ein bisschen:
der xml Variablenbezeichner und dessen Methoden
neben boolean, integer, time etc gibt es u.a. auch den Variablenbezeichner xml. Diesen findet man natürlich auch nicht bei der "offiziellen" Scriptdoku bei EQ3.
Mit Hilfe des Methoden von XML kann man ohne viel String Such Gedönse ein xml FIle bzw ein xml String analysieren. Mein Interesse für diesen Datentyp hielt sich bissher in engeren Grenzen, im Realumfeld bei mir beherrscht dieses IOBroker unter JSScript bzw der Freepascal Compiler, mit dem ich den SDV geschrieben habe, dieses xmal besser und schneller als die CCU. Nicht destro trotz kann dieses aber trotzdem hilfreich sein.
vorgehensweise:
1. man versuche eine xml Antwort zu analysieren. z.b. eine der CCU internen, die der Aufruf aus dem xmlrpc Namenraum als Ergebnis liefert.
.Parse()
Parse dient dazu, einen String in ein xml Object zu bekommen.
syntax: [xml]= [xml].Parse(AText: string);
Beispiel:
Code: Alles auswählen
xml x;
xml xStruct = x.Parse(xmlrpc.GetParamset(oInterface, sDevSerial, "MASTER"));
oder
Code: Alles auswählen
xml xStruct = x.Parse("<struct><member><name>ADAPTIVE_REGULATION</name><value><i4>2</i4></value></member><member><name>BOOST_AFTER_WINDOW_OPEN</name><value><boolean>0</boolean></value></member></struct>");
.GetChildNode()
GetChildnode liefert das 1. bzw das AIndex (Index beginnt mit 0!) Node mit dem Namen "AText" als xml-Object zurück
Syntax
[xml]= [xml].GetChildNode(AText: string);
[xml]= [xml].GetChildNode(AText: string, AIndex: integer);
Beispiel: Es exitiere das xml xNode mit folgendem, geparsten Inhalt:
<struct>
<member><name>ADAPTIVE_REGULATION</name><value><i4>2</i4></value></member>
<member><name>BOOST_AFTER_WINDOW_OPEN</name><value><boolean>0</boolean></value></member>
</struct>
GetCHildNode kann nun folgendermaßen angewandt werden:
xml x1=xNode.GetChildNode ("member",0); ergibt das Node: <member><name>ADAPTIVE_REGULATION</name><value><i4>2</i4></value></member>
xml x1=xNode.GetChildNode ("member",1); ergibt das Node: <member><name>BOOST_AFTER_WINDOW_OPEN</name><value><boolean>0</boolean></value></member>
Bei einem nicht vorhandenem Nodenamen ist das Ergebnis ein leeres Node. EIn nicht leeres Node kann so identifiziert werden:
'if (xNode) {Tue was;}'
Bei einer AUfzählung von ParameterNodes wie bei einem Getparamset muss man also eine Zählvariable benutzen und dann abbrechen, wenn das GetChildNode nach dem Increment dann ein LeerNode ergibt.
.GetName()
Syntax [string]=[xml].GetName();
Liefert den Namesbezeichner des XML Node
Beispiel: Es exitiere das xml xNode mit folgendem, geparsten Inhalt:
<member><name>BOOST_AFTER_WINDOW_OPEN</name><value><boolean>0</boolean></value></member>
WriteLine (xNode.GetName()); liefert als Ergebnis: member
.GetText()
Syntax [string]=[xml].GetText();
Liefert den Wert eines XML Node
Beispiel: Es existiere das xml xNode mit folgendem, geparsten Inhalt:
<name>BOOST_AFTER_WINDOW_OPEN</name>
WriteLine (xNode.GetText()); liefert als Ergebnis: BOOST_AFTER_WINDOW_OPEN
.GetAttribute()
Syntax [string]=[xml].GetAttribute(AAttri: string);
Liefert das durch AAttri spezifizierte Attribut des XML Node
Beispiel: Es exitiere das xml xNode mit folgendem, geparsten Inhalt:
<name MSET="BOOST_AFTER_WINDOW_OPEN"><value><i4>2</i4></value></name>
WriteLine (xNode.GetAttribute("MSET")); liefert als Ergebnis: BOOST_AFTER_WINDOW_OPEN
Hinzu kommen noch die üblichen Methoden
.Vartype() liefert auf eine xml Variable den Wert 20
.ToString (); gibt des Text des XNodes aus
.Type() gibt xml aus
EIn praktisches Beispiel dazu wurde von @Henke hier im Forum publiziert.
Black