使用PHP更新XML节点

时间:2011-01-20 14:00:41

标签: php xml simplexml

我有一个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,而且我正在更新元素,而不是属性。这就是我的困惑所在。

3 个答案:

答案 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;

这可能不是最佳答案,但对我有用。