如果传递的值与父值匹配,我正在尝试更新XML文件。基本上每分钟都会ping一系列IP地址,并将结果传递给我的php脚本,如下所示:http://ipaddress/presence.php?ip=192.168.0.55&present=1
。
XML(presence.xml):
<?xml version="1.0" encoding="UTF-8"?>
<Presence>
<Person IP="192.168.0.55">
<Name>Bob</Name>
<Present>1</Present>
<LastSeen>14/09/2014 01:48:43 pm</LastSeen>
</Person>
<Person IP="192.168.0.56">
<Name>John</Name>
<Present>0</Present>
<LastSeen>13/09/2014 08:32:19 pm</LastSeen>
</Person>
</Presence>
PHP(presence.php):
<?php
$ip = $_REQUEST['ip'];
$present = $_REQUEST['present'];
// Write latest data to XML file
$Presence = simplexml_load_file('presence.xml');
foreach ($Presence->xpath('//Person') as $Person) {
if ($Person[@IP] == $ip) {
$Person->Present = $present;
}
else {}
}
?>
我希望上面的代码会使用URL中传递的值更新<Present>
标记。但没有任何反应,我在日志文件中没有任何错误。我确实在最初的错误情况下写入了IF语句中的$ present值,这确实引发了关于未定义变量的错误,这表明代码工作到IF语句。
任何帮助表示感谢,我看过各种Q&amp;就像在Stackoverflow上这是我如何得到这一点,但无法弄清楚这一点。一旦我清除了这个障碍,我希望能够添加代码来更新XML中的<LastSeen>
标记。
答案 0 :(得分:0)
网址需要正确格式化(替换$ with&amp;):
http://ipaddress/presence.php?ip=192.168.0.55&present=1
修改强> 确保在进行修改后保存它
$Presence->asXML('presence.xml');
答案 1 :(得分:0)
尝试:
foreach ($Presence->Person as $Person) {
if ($Person->attributes()->IP == $ip) {
$Person->Present = $present;
}
}
另外,请确保您实际获得的是XML字符串(采用您发布的格式),以防您的输入不符合预期。