Я извлекаю данные с XML-страницы и пытаюсь написать обратно с помощью некоторого PHP-кода. Я успешно сделал это, потянув отдельные узлы с пунктами (0) и getAttributeNode
, затем сохранив обратно в nodeValue
вместо setAttribute
. Моя цель, однако, состоит в том, чтобы заставить код работать с оператором foreach
, чтобы мне не приходилось возвращаться и редактировать его, если трейлы добавляются и удаляются.
Если я попытаюсь изменить его с помощью setAttribute
, это не сработает ни в одном из сценариев (вытягивая их по отдельности или с помощью оператора foreach
), и я не могу понять, как сделать getAttributeNode
и nodeValue
работа с оператором foreach
. Я думаю, что мне может понадобиться массив, но ничего из того, что я пробовал, до сих пор не работало. Я могу загрузить страницу без ошибок, но при нажатии кнопки «Отправить» ничего не происходит.
<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);
$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'));
}
?>