DOMDocument 不更新 nodeValue
DOMDocument not updating nodeValue
所以我写了一段代码,应该是编辑 xml 文件。但这似乎不起作用。我检查了所有内容,所有数据似乎都通过了,但不知何故它没有更新节点。创建 xml 文件和数据有效,添加数据也有效。但不知何故我似乎无法更新它。
if ($edit && isset($_POST["submit"])) {
$doc = new DomDocument('1.0');
$doc->validateOnParse = true;
$doc->load('data.xml');
$message = getElementById($_GET["id"], $doc);
$message->getElementsByTagName("title")->nodeValue = 'hey';
$message->getElementsByTagName("content")->nodeValue = $_POST["content"];
$target = $message->getElementsByTagName("target")->nodeValue = $_POST["target"];
$date1 = $message->getElementsByTagName("startDate")->nodeValue = $_POST["date1"];
$date2 = $message->getElementsByTagName("endDate")->nodeValue = $_POST["date2"];
$doc->formatOutput = true;
$doc->save('data.xml');
}
function getElementById($id, $doc)
{
$xpath = new DOMXPath($doc);
return $xpath->query("//*[@id='$id']")->item(0);
}
XML:
<message id="5a1c301ae5429" top="12px" left="12px" duration="20">
<title>hey</title>
<content>12345</content>
<target>2</target>
<startDate>27/11/2017 16:30</startDate>
<endDate>27/11/2017 16:50</endDate>
<media type="image" width="200px" height="200px" top="-20px" left="129px">
<uri>
localhost/xml/uploads/4215c27edf5ff51aee0def29f84949be.jpg
</uri>
</media>
</message>
当您调用 getElementsByTagName
时,此 returns 与标签名称匹配的节点列表。所以每次访问该值时,您应该使用...
$message->getElementsByTagName("title")->item(0)->nodeValue = 'hey';
由于每个标签只有一个,我使用 ->item(0)
来获取列表中的第一个节点。
在您需要访问元素的所有时间重复相同的逻辑。
所以我写了一段代码,应该是编辑 xml 文件。但这似乎不起作用。我检查了所有内容,所有数据似乎都通过了,但不知何故它没有更新节点。创建 xml 文件和数据有效,添加数据也有效。但不知何故我似乎无法更新它。
if ($edit && isset($_POST["submit"])) {
$doc = new DomDocument('1.0');
$doc->validateOnParse = true;
$doc->load('data.xml');
$message = getElementById($_GET["id"], $doc);
$message->getElementsByTagName("title")->nodeValue = 'hey';
$message->getElementsByTagName("content")->nodeValue = $_POST["content"];
$target = $message->getElementsByTagName("target")->nodeValue = $_POST["target"];
$date1 = $message->getElementsByTagName("startDate")->nodeValue = $_POST["date1"];
$date2 = $message->getElementsByTagName("endDate")->nodeValue = $_POST["date2"];
$doc->formatOutput = true;
$doc->save('data.xml');
}
function getElementById($id, $doc)
{
$xpath = new DOMXPath($doc);
return $xpath->query("//*[@id='$id']")->item(0);
}
XML:
<message id="5a1c301ae5429" top="12px" left="12px" duration="20">
<title>hey</title>
<content>12345</content>
<target>2</target>
<startDate>27/11/2017 16:30</startDate>
<endDate>27/11/2017 16:50</endDate>
<media type="image" width="200px" height="200px" top="-20px" left="129px">
<uri>
localhost/xml/uploads/4215c27edf5ff51aee0def29f84949be.jpg
</uri>
</media>
</message>
当您调用 getElementsByTagName
时,此 returns 与标签名称匹配的节点列表。所以每次访问该值时,您应该使用...
$message->getElementsByTagName("title")->item(0)->nodeValue = 'hey';
由于每个标签只有一个,我使用 ->item(0)
来获取列表中的第一个节点。
在您需要访问元素的所有时间重复相同的逻辑。