我是新来的PHP和一般编码。我试图从远程设备解析xml并访问特定的值数据。例如,我想显示组9探针1值,但无法使其工作。有小费吗?帮助访问php中的xml属性
这里是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>
这里是我的PHP代码中的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;
?>
一的print_r($ XML);显示以下信息:
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
)
)
)
)
)
这做到了!我只需要把/值放在xpath结尾 – Mike 2010-08-03 20:22:06
@Brian Driscoll:'/ Device/Group [@ id =“9”]/Probe [@ id =“1”]/Value' would会更好。切勿用'''运算符开始表达式。 – 2010-08-03 20:33:32
@Ajjandro吧?为什么不? – Gordon 2010-08-03 20:46:31