Hallo Zusammen,
was XML Zugriff angeht bin ich absoluter Neuling und bräuchte mal eure Hilfe.
Ich möchte auf einige Variablen eines andren im Netzwerk befindlichen Systems zugreifen was mir z.B. über Firefox mit folgender URL gelingt:
http://192.168.16.189:8081/ISPWebService/IspDabWs.svc/readFloat?machineCode=VAR4&accessCode=FoliDickDuIW
Firefox gibt dann folgendes aus:
<?xml version="1.0"?>
624.2
wenn ich nun in IPS folgendes Skript ausführe
<?
$header[] = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3";
$header[] = "Content-Type: text/xml; charset=utf-8";
$header[] = "Connection: keep-alive";
$ch = curl_init("http://192.168.16.189:8081/ISPWebService/IspDabWs.svc/readFloat?machineCode=VAR4&accessCode=FoliDickDuIW");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// $xml = simplexml_load_string(utf8_encode($output)) or die("Unable to load XML file!");
echo $output;
?>
Erscheint mir als Sciptausgabe einzig und allein der Wert 624.2. Den kann ich aber in keine Variable schreiben (ist allerdings das Ziel des Ganzen)
Wenn ich nun die Checkbox „HTML filtern“ bei der Textausgabe abwähle sehe ich das
<float xmlns=„http://schemas.microsoft.com/2003/10/Serialization/ “>624.2</float>
ausgegeben wird.
Wir kann ich das am scnellsten und saubersten filtern und in eine Variable schreiben? Das soll später mit ca. 100 Variablen gleichzeitig geschehen.
Beste Grüße,
Thomas
KaiS
28. August 2018 um 14:06
2
Vielleicht hilft dir das weiter:
$context = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
$url = 'http://192.168.16.189:8081/ISPWebService/IspDabWs.svc/readFloat?machineCode=VAR4&accessCode=FoliDickDuIW';
$xml = file_get_contents($url, false, $context);
$xml = simplexml_load_string($xml);
print_r($xml);
Doku dazu: PHP: simplexml_load_string - Manual
Damit erhältst du ein Objekt und kannst auf die einzelnen Werte zugreifen.
Grüße,
Kai
Dank KaiS!
jetzt gibt ein
echo $xml;
nur noch den Wert aus! wie gewollt also.
lässt sich aber allerdings via
SetValue(20504 /*[W&H Extruder\W&H MK 1107\MK 1107\Leistung in kg/h]*/,$xml);
nicht in eine Variable schreiben sondern gibt immer den Fehler:
Warning : Cannot auto-convert value for parameter VariableValue in
/var/lib/symcon/scripts/18629.ips.php on line
10
aus.
habe es auch mal mit
SetValue(20504 /*[W&H Extruder\W&H MK 1107\MK 1107\Leistung in kg/h]*/,$xml[0]);
probiert. allerdings das gleiche Ergebnis erhalten…
Ich weiß ich stell mich an… sry:banghead:
KaiS
28. August 2018 um 15:00
4
Versuch es mal mit floatval().
Also:
floatval($variable);
Grüße,
Kai
leider das gleiche Ergebnis…
Interessant ist noch dass wenn ich
print_r($xml);
eingebe
als Antwort folgendes kommt:
SimpleXMLElement Object
(
[0] => 623.8
)
Sonst noch eine Idee?
KaiS
28. August 2018 um 15:22
6
Was ist die Variable 20504 für ein Typ?
Hast du wirklich folgendes versucht?
SetValue(20504 /*[W&H Extruder\W&H MK 1107\MK 1107\Leistung in kg/h]*/,floatval($xml[0]));
Grüße,
Kai
KaiS:
Was ist die Variable 20504 für ein Typ?
Hast du wirklich folgendes versucht?
SetValue(20504 /*[W&H Extruder\W&H MK 1107\MK 1107\Leistung in kg/h]*/,floatval($xml[0]));
Grüße,
Kai
Nein hatte
floatval($xml);
probiert…
jetzt funktioniert es!! vielen Dank für die ultra schnelle Hilfe!