php - 读取和更新匹配值的XML值

时间:2014-09-14 13:51:58

标签: php xml

如果传递的值与父值匹配,我正在尝试更新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>标记。

2 个答案:

答案 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字符串(采用您发布的格式),以防您的输入不符合预期。