XML添加属性到错误的节点

时间:2018-11-09 17:57:53

标签: php xml domdocument domxpath

我是xml的新手,我不知道如何为 code 节点设置 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 ,而不是 code rate

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

因此,您只需要选择code元素。像这样:

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

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