我使用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,并且应该给出要求