我有一个XML文件test.xml
<?xml version="1.0"?>
<info>
<user>
<name>
<firstname>FirstName</firstname>
<lastname>Last Name</lastname>
<nameCoordinate>
<xName>125</xName>
<yName>20</yName>
</nameCoordinate>
</name>
</user>
</info>
我正在尝试更新节点xName&amp; yName在表单提交上使用PHP。所以,我使用simplexml_load_file()加载了文件。 PHP表单操作代码在
下面<?php
$xPostName = $_POST['xName'];
$yPostName = $_POST['yName'];
//load xml file to edit
$xml = simplexml_load_file('test.xml');
$xml->info->user->name->nameCoordinate->xName = $xPostName;
$xml->info->user->name->nameCoordinate->yName = $yPostName;
echo "done";
?>
我想更新节点值,但上面的代码似乎不正确。谁能帮我纠正呢?
更新: 我的问题有点类似于Updating a XML file using PHP,但是在这里,我正在从外部文件加载XML,而且我正在更新元素,而不是属性。这就是我的困惑所在。
答案 0 :(得分:29)
您没有访问正确的节点。在您的示例中,$xml
包含根节点<info/>
。这是一个很好的提示:始终将保存XML文档的变量命名为其根节点,这样可以避免这种混淆。
另外,正如Ward Muylaert指出的那样,你需要保存文件。
以下是更正后的示例:
// load the document
// the root node is <info/> so we load it into $info
$info = simplexml_load_file('test.xml');
// update
$info->user->name->nameCoordinate->xName = $xPostName;
$info->user->name->nameCoordinate->yName = $yPostName;
// save the updated document
$info->asXML('test.xml');
答案 1 :(得分:3)
您必须将更改写回文件,使用SimpleXMLElement的asXML方法。
答案 2 :(得分:0)
尝试这样。
CREATE OR REPLACE FUNCTION branch_performance_measurements_daily(
IN after DATE,
IN before DATE,
)
RETURNS TABLE (
date_of_sum DATE,
func_a INT,
func_b INT,
func_c INT
)
AS $$
BEGIN
RETURN QUERY
WITH days_series AS (
SELECT d::date day FROM generate_series(after, before, '1 day') day)
SELECT days_series.day AS date_of_sum,
sum(a + b),
sum((a*b)/c),
count(a)
FROM table b
WHERE DATE(b.created_at) = DATE(days_series.day)
GROUP BY days_series.day, b.user_id;
END;
$$ LANGUAGE plpgsql;
这可能不是最佳答案,但对我有用。