我的代码应该从jquery datepicker中选择一天,然后搜索我的xml文件并在选择列表中显示匹配元素的标题。当用户从列表中选择一个项目时,它应该从xml中删除该元素。
以下是我的代码,删除部分有问题。请帮忙 [一切都在一页上完成deleteTask.php]
PHP
//All tasks in Account
echo "<strong>Delete Task</strong>";
echo "<br><br>";
echo '<form action="deleteTask.php" method="post">';
echo '<div>';
echo '<label for="date">Date </label>';
echo '<input type="text" id="datepicker_calender" name="date" required>';
echo '</div>';
echo '<h1>';
echo '<button type="submit">Submit</button>';
echo '</h1>';
echo '</form>';
echo "<br><br>";
//Search task
if (isset($_POST['date']) || isset($_POST['task'])) {
$xml_file = simplexml_load_file("account/" . $_COOKIE["Email"] . "/" . $_COOKIE["Email"] . ".xml");
echo '<form action="deleteTask.php" method="post">';
echo '<select name="task" required>';
foreach ($xml_file->task as $aTask) {
if ($aTask->date == $_POST['date']) {
echo '<option value="' . $aTask->title . '">' . $aTask->title . '</option>';
}
}
echo "</select>";
echo '<h1>';
echo '<button type="submit">Submit</button>';
echo '</h1>';
echo '</form>';
if (isset($_POST['task'])) {
foreach ($xml_file as $aTask) {
if ($aTask->title == $_POST['task']) {
unset($xml_file->task);
}
}
$xml_file->saveXML("account/" . $_COOKIE["Email"] . "/" . $_COOKIE["Email"] . ".xml");
}
}
XML
<?xml version="1.0"?>
<calender>
<task>
<date>04/09/2013</date>
<title>test</title>
<description>test</description>
</task>
<task>
<date>04/09/2013</date>
<title>dfn sd</title>
<description>dfsf</description>
</task>
<task>
<date>04/10/2013</date>
<title>test</title>
<description>test</description>
</task>
</calender>
答案 0 :(得分:1)
我不认为SimpleXML提供了删除XML节点的方法。为了使其有效,您需要使用DOM扩展名和dom_import_simplexml()
方法。
参考:Remove a child with a specific attribute, in SimpleXML for PHP
此外,foreach
会在迭代时创建元素的副本。这意味着为了使您的代码能够正常工作,您需要执行以下操作:
foreach ($xml_file as &$aTask) {
if ($aTask->title == $_POST['task']) {
unset($aTask);
}
}
注意foreach声明中的&符号,它通过引用来形成。
答案 1 :(得分:0)
我认为您需要一个更强大的XML引擎来执行此操作:
$dd = new DOMDocument;
$dd->load($filename);
$dx = new DOMXPath($dd);
$nodeList = $dx->query("/calender/task[title='" . $_POST['task'] . "']"); // calendAr
if ($nodeList->length == 1) {
$dd->documentElement->removeChild($nodeList->item(0));
}
$dd->save($filename);