Eh.. ka nesaprotu šito ņemšanos. Es būtu rakstījis sekojoši:
<?php
function change($root, $kat, $idx, $target)
{
$galerijas = $root->getElementsByTagName("node");
// visaam galerijaam
foreach ($galerijas as $galerija)
{
$kategorijas = $galerija->getElementsByTagName("node");
// meklee konkreeto kategoriju
foreach ($kategorijas as $kategorija)
{
if ($kategorija->getAttribute("label") == $kat)
{
$childs = $kategorija->getElementsByTagName("node");
if ($idx < $childs->length)
{
$childs->item($idx)->setAttribute("label", $target);
return true; // ir nomainiits
}
else
{
return false; // nav taada indeksa konkreetajaa kategorijaa
}
}
}
}
return false; // nav taadas kategorijas
}
$kat = "kategorija_b"; // kuru kategoriju mainiit
$idx = 1; // otrais elements
$target = "uz_ko_nomainiit_labeli";
$dom = new DomDocument();
$dom->load("a.xml");
$result = change($dom->documentElement, $kat, $idx, $target);
if ($result == false)
{
echo "Kautkaads errors, lol!\n";
}
$dom->save("b.xml");
?>
Un ja tas ir par lēnu, tad aizvietotu visus fjas getElementsByTagName() izsaukumus par ->firstChild, un visus foreach ciklus par ->nextSibiling