Удалить дочерний XML с тем же именем

У меня есть большой XML со следующим:

<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
..
<ar>1157,6200000</ar>
...
</ar>
</arak>

То, что я хочу, это удалить arak-> ar-> ar child, потому что его причина в импорте выглядит как дубликаты и замедляет процесс.

Я пробовал следующее:

    $node = readfile($arlista[0]);
$nodes = simplexml_load_string($node);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as &$ar){
$nodes->removeChild($ar);
}
echo $nodes;

И это только возвращает мне исходный xml, не удаляя дочерние узлы arak-> ar-> ar.

Что я делаю неправильно?

0

Решение

В SimpleXML нет такого понятия, как :: removeChild ().
В цикле foreach вы хотите сделать следующее:

foreach ($arnode as $ar){
unset($ar->{0});
}

Пожалуйста, обратите внимание: опубликованный XML недействителен, но я уверен, что это просто какая-то копия&вставить дефект

Полный код:

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
<ar>1157,6200000</ar>
</ar>
</arak>
</valasz>';
$nodes = simplexml_load_string($xml);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as $ar){
unset($ar->{0});
}
print_r($nodes);

Возвращает это
SimpleXMLElement Object
(
[@attributes] => Массив
(
[verzio] => 1,0
)

    [arak] => SimpleXMLElement Object
(
[ar] => Array
(
[0] => SimpleXMLElement Object
(
[cikkid] => 439902
[cikkszam] => DVDV-16Z10
[listaar] => 1225,0000000
[akcios_ar] => 1157,6200000
[devizanem] => HUF
)

[1] => SimpleXMLElement Object
(
)

)

)

)
1

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

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

По вопросам рекламы [email protected]