XML Добавление атрибута к неправильному узлу

Я новичок в XML и не могу понять, как установить темп атрибут для код узел. По какой-то причине он устанавливает атрибут валюта узел.

<?

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

Как видите, на последнем валюта узел, курс валюты обновляется вместо кодовая скорость.

Любая помощь приветствуется.

0

Решение

Ваш запрос XPath возвращает элемент <currency>,
Так как //*[code = '$curcode'] выбирает все элементы, которые имеют code элемент со значением $curcode,

Так что все, что вам нужно, это просто выбрать code элемент. Как это:

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

или же

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector