Умножьте значение XML-тега, если оно совпадает со значением другого тега в том же XML с помощью PHP

#php #xml #dom #simplexml

#php #xml #dom #simplexml

Вопрос:

Я читал о том, как умножить значение XML-тега, если оно совпадает со значением другого тега в том же XML, я привожу вам пример:

У меня есть XML с этими значениями:

 <?xml version="1.0" encoding="utf-8"?>
<products>
  <item>
    <name>PRODUCT 1</name>
    <brand>BRAND 1</brand>
    <currency>CURRENCY 1</currency>
    <price>10</price>
  </item>
  <item>
    <name>PRODUCT 2</name>
    <brand>BRAND 2</brand>
    <currency>CURRENCY 1</currency>
    <price>5</price>
  </item>
  <item>
    <name>PRODUCT 3</name>
    <brand>BRAND 3</brand>
    <currency>CURRENCY 2</currency>
    <price>1</price>
  </item>
  <item>
    <name>PRODUCT 4</name>
    <brand>BRAND 4</brand>
    <currency>CURRENCY 2</currency>
    <price>2</price>
  </item>
  <item>
    <name>PRODUCT 5</name>
    <brand>BRAND 5</brand>
    <currency>CURRENCY 2</currency>
    <price>5</price>
  </item>
</products>
  

И мне нужно умножить значения на 10 из <price> тега, если они соответствуют ВАЛЮТЕ 2 в <currency> теге, оставляя результат, подобный этому:

 <?xml version="1.0" encoding="utf-8"?>
<products>
  <item>
    <name>PRODUCT 1</name>
    <brand>BRAND 1</brand>
    <currency>CURRENCY 1</currency>
    <price>10</price>
  </item>
  <item>
    <name>PRODUCT 2</name>
    <brand>BRAND 2</brand>
    <currency>CURRENCY 1</currency>
    <price>5</price>
  </item>
  <item>
    <name>PRODUCT 3</name>
    <brand>BRAND 3</brand>
    <currency>CURRENCY 2</currency>
    <price>10</price><!--- Have been multiplied by 10 because matched "CURRENCY 2" on the "<currecy>" tag -->
  </item>
  <item>
    <name>PRODUCT 4</name>
    <brand>BRAND 4</brand>
    <currency>CURRENCY 2</currency>
    <price>20</price><!--- Have been multiplied by 10... -->
  </item>
  <item>
    <name>PRODUCT 5</name>
    <brand>BRAND 5</brand>
    <currency>CURRENCY 2</currency>
    <price>50</price><!--- Have been multiplied by 10... -->
  </item>
</products>
  

Я написал этот код, но он не работает, и я не совсем уверен, почему, любая помощь будет очень оценена.

 <?php
$sXML = simplexml_load_file('file.xml', null, LIBXML_NOBLANKS);
$currency = $sXML->xpath("//item[currency='CURRENCY 2']");
foreach ( $currency as $value )    {
    $value = $value * 10;
}
unset($value);

$domDocument = dom_import_simplexml($sXML)->ownerDocument;
$domDocument->formatOutput = true;
echo $domDocument->save('new.xml');
?>
  

Комментарии:

1. Вы почти на месте. Ваша $value переменная представляет каждый из соответствующих <item> элементов; таким образом, вы хотите $value->price = $value->price * 10 манипулировать каждым <price> элементом.

Ответ №1:

Благодаря salathe с помощью этого sintax происходит волшебство $value->price = $value->price * 10

 <?php
$sXML = simplexml_load_file('file.xml', null, LIBXML_NOBLANKS);
$currency = $sXML->xpath("//item[currency='CURRENCY 2']");
foreach ( $currency as $value )    {
    $value->price = $value->price * 10;
}
unset($value);

$domDocument = dom_import_simplexml($sXML)->ownerDocument;
$domDocument->formatOutput = true;
echo $domDocument->save('new.xml');
?>