php - 使用 foreach 避免多余的 XPath 表单处理代码
问题描述
我的 XML 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<facilities>
<areas>
<area name="Rocket">
<trails>
<trail name="Trail 1" status="CLOSED" />
<trail name="Trail 2" status="CLOSED" />
<trail name="Trail 2" status="CLOSED" />
</trails>
</area>
</areas>
</facilities>
我可以使用以下代码成功编辑属性:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<?php
$xml = new DOMDocument('1.0', 'utf-8');
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xml->load('example.xml');
$xpath = new DOMXpath($xml);
$asstatus = $xpath->query("//facilities/areas/area[@name='Rocket']/trails/trail[@name='Trail 1']/@status")->item(0);
$childForm = '';
foreach ( $xpath->query("//trails/trail") as $trail ) {
$childForm .= "<form action=''>
<span class=\"title\">".$trail->getAttribute("name")."</span> <span class=\"title\">Status</span>
<select name=\"asstatusform\" >
<option selected value=".$trail->getAttribute("status").">".$trail->getAttribute("status")."</option>
<option value=\"OPEN\">OPEN</option>
<option value=\"CLOSED\">CLOSED</option>
<option value=\"RACING CLOSURE\">RACING CLOSURE</option>
</select></span>
<br>
</form>";
}
?>
<form action="" method="POST">
<?php echo $childForm; ?>
<input name="submit" type="submit" value="Save" />
</form>
<?php
if (isset($_POST['submit']))
{
$trail->setAttribute('status', $_POST['asstatusform']);
htmlentities($xml->save('example.xml'));
}
?>
我想知道是否有一种简单的方法可以将其更改为使用 foreach,这样我就不必为每个单独的跟踪名称创建新的查询和表单。到目前为止,我已经尝试了一些变化,但没有取得很大的成功。
解决方案
使用 XPath 获取轨迹列表,然后为每个轨迹获取显示属性的简单组合。
foreach ( $xpath->query("//trails/trail") as $trail ) {
echo $trail->getAttribute("name")."/".
$trail->getAttribute("status").PHP_EOL;
}
您可以决定如何显示这些数据 - 单独的表格/表格等。
代码中的输出从使用嵌入的 PHP 将数据回显到 HTML。您需要保持一致并确保您也正确嵌套了引号。以下应该在循环中工作......
echo "<form method=\"POST\" action=''>
<span class=\"title\">".$trail->getAttribute("name")."</span> <span class=\"title\">Status</span>
<select name=\"asstatusform\" >
<option selected value=".$trail->getAttribute("status").">".$trail->getAttribute("status")."</option>
<option value=\"OPEN\">OPEN</option>
<option value=\"CLOSED\">CLOSED</option>
<option value=\"RACING CLOSURE\">RACING CLOSURE</option>
</select></span>
<br>
<input name=\"submit\" type=\"submit\" value=\"Save\" />
</form>";
推荐阅读
- spring-websocket - Spring stomp websocket“不完整的帧,正在重置输入缓冲区......”
- android - 使用 PUT 请求执行 httpclient 时出现异常
- mysql - NaviCat 中的 MySQL 语法错误 / WP 编辑器中的 OK
- testing - 无法从开发分支创建 jar
- python - 如何通过 Selenium 和 Python 在模态窗口中单击关闭按钮
- tfs - 使用 VssConnection 和用户名/密码连接到 Azure DevOps (TFS) 服务器
- java - 为kafka事件订阅一个rest api
- r - 随机选择一个样本并使用它生成 1000 个引导样本
- javascript - 猫头鹰旋转木马箭头消失
- php - jQuery Typeahead Ajax 在引导程序 4 中不起作用