我正在从XML页面提取数据,并尝试使用一些PHP代码写回数据。通过使用item(0)和getAttributeNode
拉各个节点,然后保存回nodeValue
而不是使用setAttribute
,我已经成功地做到了。但是,我的目标是使代码与foreach
语句一起使用,这样,即使添加和删除了路径,我也不必回头对其进行编辑。
如果我尝试使用setAttribute
进行更改,则在两种情况下均不起作用(单独或使用foreach
语句将其拉出),而且我不知道如何制作{ {1}}和getAttributeNode
使用nodeValue
语句。我想我可能需要一个数组,但是到目前为止我没有尝试过。我可以加载页面而不会出现错误,但是当我单击“提交”按钮时没有任何反应。
foreach
答案 0 :(得分:1)
您说要“使用foreach语句”编辑此属性,但是您在循环之外进行了uploadFile = (file, metadata) => {
const pathToUpload = this.state.channel.id;
const ref = this.props.messagesRef;
const filePath = `chat/public/${uuidv4}.jpg`;
this.setState(
{
uploadState: "uploading",
},
() => {
let uploadTask = this.state.storageRef.child(filePath).put(file, metadata);
uploadTask.on(
"state_changed",
snap => {
const percentUploaded = Math.round(
(snap.bytesTransferred / snap.totalBytes) * 100
);
this.setState({ percentUploaded });
},
err => {
console.error(err);
this.setState({
errors: [...errors, err],
uploadState: "error",
});
},
() => {
console.log(uploadTask);
uploadTask.snapshot.ref
.getDownloadURL()
.then(downloadUrl => {
this.sendFileMessage(downloadUrl, ref, pathToUpload);
})
.catch(err => {
console.error(err);
this.setState({
errors: [...this.state.errors, err],
uploadState: "error",
});
});
}
);
}
);
};
调用,因此您仅更改最后一项。您还将表单相互嵌套,这是行不通的。
如果我的理解正确,您想根据表单提交来分别更新每个路径的状态。为此,您需要将数组提交回表单,然后循环遍历。可能棘手的部分是将数组与XML的内容进行匹配。理想情况下,您具有某种唯一标识符,但是在这段代码中,我只是假设XML元素的顺序在显示和处理之间不会改变。因此,第一个POST条目是第一个XML元素,等等。
setAttribute
您的内联HTML令我头疼,我可以想像您在键入内容时也有同样的感觉。只需打破PHP即可获得一长段HTML。我已将alternative syntax用于<?php
$xml = new DOMDocument;
$xml ->load('example.xml');
$xpath = new DOMXpath($xml);
$trails = $xpath->query("//trails/trail");
if (isset($_POST["submit"])) {
foreach ($_POST["asstatusform"] as $k=>$state) {
$trails->item($k)->setAttribute("status", $state);
}
$xml->save('example.xml');
}
?>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<form action="" method="POST">
<?php foreach ($trails as $trail): ?>
<span class="title"><?= htmlspecialchars($trail->getAttribute("name")) ?></span>
<span class="title">Status</span>
<select name="asstatusform[]">
<option selected value="<?= htmlspecialchars($trail->getAttribute("status")) ?>">
<?= htmlspecialchars($trail->getAttribute("status")) ?>
</option>
<option value="OPEN">OPEN</option>
<option value="CLOSED">CLOSED</option>
<option value="RACING CLOSURE">RACING CLOSURE</option>
</select>
</span>
<br/>
<?php endforeach; ?>
<input name="submit" type="submit" value="Save" />
</form>
循环,并将short echo tags用于输出。不要忘记总是使用htmlspecialchars()
来将输出转义为HTML页面。