首页 > 解决方案 > XML将属性添加到错误的节点

问题描述

我是 xml 新手,我不知道如何为代码节点设置rate属性。由于某种原因,它将属性设置为货币节点。

<?

@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>

如您所见,在最后一个货币节点上,正在更新货币汇率而不是代码汇率

任何帮助表示赞赏。

标签: phpxmldomdocumentdomxpath

解决方案


您的 XPath 查询返回 element <currency>
因为//*[code = '$curcode']选择code具有值为 的元素的所有元素$curcode

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

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

或者

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

推荐阅读