Je suis novice en PHP et en codage en général. J'essaye d'analyser XML à partir d'un périphérique distant et d'accéder à des données de valeur spécifiques. Je voudrais afficher la valeur du groupe 9 sonde 1 par exemple et je ne peux pas le faire fonctionner. Des conseils?Aide pour accéder à l'attribut xml dans php
Voici le xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <Device id="S10011" hb="1935">
<Group id="1" />
<Group id="2" />
<Group id="3" />
<Group id="4" />
<Group id="5" />
<Group id="6" />
<Group id="7" />
<Group id="8" />
- <Group id="9">
- <Probe id="99">
<Value>1.0</Value>
</Probe>
- <Probe id="1">
<Value>86.4</Value>
</Probe>
- <Probe id="2">
<Value>45.7</Value>
</Probe>
- <Probe id="3">
<Value>2.9</Value>
</Probe>
- <Probe id="4">
<Value>1.0</Value>
</Probe>
</Group>
</Device>
Voici mon code php pour lire dans le xml:
<?php
// Establish a port 80 connection
$http = fsockopen("192.168.2.106",80);
// Send a request to the server
$req = "GET /xmldata HTTP/1.0\r\n";
$req .= "Host: 192.168.2.106\r\n";
$req .= "Connection: Close\r\n\r\n";
fputs($http, $req);
// Output the request results
while(!feof($http)) {
$xmlstr .= fgets($http, 2048);
}
// Close the connection
fclose($http);
$xml = simplexml_load_string($xmlstr);
print_r($xml);
$myValue = $xml->xpath('//Group[@ID="9"]/Probe[@ID="1"]/value');
echo $myValue;
?>
A print_r ($ xml); montre les informations suivantes:
SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => S10011
[hb] => 158221
)
[Group] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 1
)
[0] =>
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 2
)
[0] =>
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 3
)
[0] =>
)
[3] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 4
)
[0] =>
)
[4] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 5
)
[0] =>
)
[5] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 6
)
[0] =>
)
[6] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 7
)
[0] =>
)
[7] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 8
)
[0] =>
)
[8] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 9
)
[Probe] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 99
)
[Value] => 2.0
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 1
)
[Value] => 89.6
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 2
)
[Value] => 42.7
)
[3] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 3
)
[Value] => 3.9
)
[4] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 4
)
[Value] => 1.0
)
)
)
)
)
qui l'a fait! tout ce que je devais faire était de mettre la valeur/à la fin du xpath aussi bien – Mike
@Brian Driscoll: '/ Device/Groupe [@ id =" 9 "]/Probe [@ id =" 1 "]/Value' être meilleur. Ne commencez jamais une expression avec l'opérateur '//'. –
@Alejandro huh? pourquoi pas? – Gordon