У меня есть XML-файл, который в настоящее время имеет 4 узла с одинаковым именем: Файл выглядит следующим образом: (data.xml)
<?xml version="1.0"?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
<name>Buy</name>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
</product>
</products>
Имеется 4 узла с одинаковым именем.(узел имени).
Затем я использую этот код PHP для замены имен узлов
<?php
/**
* @param $xml string Your XML
* @param $old string Name of the old tag
* @param $new string Name of the new tag
* @return string New XML
*/
function renameTags($xml, $old, $new)
{
$dom = new DOMDocument();
$dom->loadXML($xml);
$nodes = $dom->getElementsByTagName($old);
$toRemove = array();
foreach ($nodes as $node)
{
$newNode = $dom->createElement($new);
foreach ($node->attributes as $attribute)
{
$newNode->setAttribute($attribute->name, $attribute->value);
}
foreach ($node->childNodes as $child)
{
$newNode->appendChild($node->removeChild($child));
}
$node->parentNode->appendChild($newNode);
$toRemove[] = $node;
}
foreach ($toRemove as $node)
{
$node->parentNode->removeChild($node);
}
return $dom->saveXML();
}
// Load XML from file data.xml
$xml = file_get_contents('data.xml');
$xml = renameTags($xml, 'name', 'newName');
echo $xml;
?>
Эта функция заменяет все узлы имени на newName;однако я хочу заменить только один экземпляр тега name, потому что хочу переименовать каждый из тегов name.Если я назову другой $ xml = renameTags ($ xml, 'name', 'newName2');
Это не будет работать, он будет использовать только первый экземпляр $ xml.
Любая идеякак я могу изменить свой код, чтобы позволить мне заменять каждый узел имени отдельно?