我的XML结构如下所示:
<?xml version="1.0"?>
<survey>
<responses>0</responses>
<question>
<title>Some survey question</title>
<answer>
<title>Answer 1</title>
<responses>0</responses>
</answer>
<answer>
<title>Answer 2</title>
<responses>0</responses>
</answer>
...
</question>
...
</survey>
我希望增加与<responses>
数组中的值匹配的答案的$response
值。以下是$response
数组的结构:
$response = array(
'sid' => session_id(),
'answers' => array(
$_POST['input1'],
$_POST['input2'],
...
)
);
我的调查xml文件中有一个名为$results
的SimpleXMLElement。以下是我的意思:
$results = simplexml_load_file($surveyResultsFile);
$i = 1;
foreach($response->answers as $answer) {
$r = $results->xpath("question[$i]/answer[title='$answer']/responses");
$r = $r[0];
$r = intval($r) + 1;
$i++;
}
file_put_contents($surveyResultsFile, $results->asXML());
增加$r
的值后,我的结果未保存。关于我做错了什么的任何想法?谢谢!
答案 0 :(得分:2)
您的脚本中存在多个错误,这可以解释为什么它不起作用。首先,您的$response
数组似乎不正确。你真的打算用变量代替键吗?试试print_r($response);
,看看它是不是你想要的。
您可以使用数组表示法(基于0)选择第n个<question/>
,如
$results->question[$i]
一旦得到正确的问题,您需要做的就是验证它确实包含XPath的建议答案。然后,您可以increment <responses/>
的值{{3}}。此外,您必须转义特殊字符,例如<
或"
,这会使您的XPath查询失败。
最后,您可以使用asXML()
实际保存文件(此处不需要file_put_contents()
。)我认为您的$surveyResults
是拼写错误,而您的意思是$surveyResultsFile
$response = array(
'sid' => session_id(),
'answers' => array(
$_POST['input1']
)
);
$results = simplexml_load_file($surveyResultsFile);
foreach ($response['answers'] as $i => $answer) {
$title = htmlspecialchars($answer);
$a = $results->question[$i]->xpath('answer[title="' . $title . '"]');
if (empty($a))
{
echo "No answer '$title' for question $i\n";
continue;
}
++$a[0]->responses;
}
$results->asXML($surveyResultsFile);
答案 1 :(得分:0)
可能有一个问题:
$r = $results->xpath('/question[$i]/answer[title=$answer]/responses');
由于您使用的是单引号('-character,实际的英文名称是“单引号”?),因此不会对XPath experssion中的变量进行求值,而是按字面处理。用正常引号(“)替换单引号,变量将正常处理。
请参阅:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single