PHP:使用$_GET[“id”]替换XML节点


PHP: Using $_GET["id"] to replace XML node

我使用PHP和一个外部XML文件来显示一个HTML页面,该页面允许用户使用各种表单/输入按钮更新项目的状态。

当前的格式是,您可以查看一个HTML页面,其中包含项目及其状态的主列表,然后单击其中一个移动到一个新的HTML页面,以便指定该项目的状态。因此,我可以单击"Widget X",然后看到一个新页面(status.php?id=X),然后单击标记为"ready"的按钮,php将使用$_GET["id"]找到相关的XML节点,并将其属性替换为"就绪"。

出于某种原因,我绝对无法让PHP使用$_get中的数据来指定XML节点。这是当前的故障排除代码:

<?php
    $idx = $_GET["id"]; /*Get id# from previous page*/
    $xml = simplexml_load_file('test.xml'); /*Load external .xml*/
    $array = array(100, 200, 300); /*Basic array for comparison*/
  print_r($xml); /*Display contents of test.xml*/
$xml->item[$idx]->status = 'waiting'; /*change item $idx's status to 'waiting'*/ 
echo '<br/>';
 print_r($xml); /*Display changed xml*/
  /*Display changed basic array values to confirm $idx has a value*/
  $array[$idx] = 123;
echo '<br/>';
  print_r($array);
  $array["$idx"] = 456;
echo '<br/>';
  print_r($array);
  $array["{$idx}"] = 789;
echo '<br/>';
  print_r($array);
?>

以下是test.xml的内容:

<?xml version="1.0" standalone="yes"?>
<widgets>
    <item>
            <name>Widget X</name>
            <status>ready</status>
    </item>
    <item>
            <name>Widget Z</name>
            <status>waiting</status>
    </item>
</widgets>

基本数组使用$idx=$_GET["id"]没有问题;选择要更改的数组元素。但是$xml->item[$idx]->状态不起作用。但是,如果我更改为$idx=0,那么$xml->item[$idx]->状态确实有效。

这是一个错误,还是我遗漏了$_GET或SimpleXML的工作原理?

使用SimpleXml 访问PHP中XML的第n个元素

SimpleXML似乎区分了数值数组和非数值数组偏移的方式与普通PHP数组略有不同,因此您需要先将变量强制转换为整数。(来自查询的所有输入字符串是一个字符串,除非您告诉PHP其他情况。)

$var=intval($_GET['var']);echo$xml->foo[$var]->bar;这将转向将字符串"1"转换为整数1,并且应该给出要求