XML 将属性添加到错误的节点

XML Adding attribute to the wrong node

我是 xml 的新手,我不知道如何为 code[=27= 设置 rate 属性] 节点。由于某种原因,它将属性设置为 currency 节点。

<?

@date_default_timezone_set("GMT"); 
if (isset($_POST['Submit']))
{
    $xml=new DomDocument("1.0","UTF-8");
    $xml->formatOutput=true;
    $xml->preserveWhiteSpace=false;
    $xml->load('rates.xml');

    $curcode = $_POST['currency-code'];
    $newrate = $_POST['rate'];

    $change = new DOMXpath($xml);

    $update = $change->query("//*[code = '$curcode']");
    $update->item(0)->setAttribute("rate", $newrate);
    $xml->save('rates.xml');
}
?>

这是xml:

<currencies>
  <currency>
    <code rate="18.543343372942">ZAR</code>
    <cname>Rand</cname>
    <cntry>Lesotho, Namibia, South Africa</cntry>
  </currency>
  <currency>
    <code rate="123">test</code>
    <cname>ewwwwwww</cname>
    <cntry>rew</cntry>
  </currency>
  <currency rate="432432434332432">
    <code rate="1234">testnew</code>
    <cname>nene</cname>
    <cntry>fnnfr</cntry>
  </currency>
</currencies>

如您所见,在最后一个 currency 节点上,正在更新 currency rate 而不是 码率.

感谢任何帮助。

您的 XPath 查询 returns 元素 <currency>.
因为 //*[code = '$curcode'] selects 所有具有 code 元素且值为 $curcode.

的元素

所以你只需要 select code 元素。像这样:

$update = $change->query("//*[code = '$curcode']/code");

$update = $change->query("//code[text() = '$curcode']");