PHP Simple XML удаляет всех детей

Я хочу удалить всех детей из моего xml-файла, прежде чем снова заполнить его (или создать обновление, но это оказалось намного сложнее). Так что я сделал

$file = "data.xml"; $xml=simplexml_load_file($file); $teller=0; foreach( $entries as $entry ) { foreach ($xml->xpath('//concerts') as $desc) { if($teller == 0) { $lol=$desc->children(); unset($lol); } $concert = $desc->addChild( 'concert' ); $concert->addChild( 'artist', array_shift( $entry ) ); $concert->addChild( 'location', array_shift( $entry ) ); $concert->addChild( 'date', array_shift( $entry ) ); $teller++; } } file_put_contents($file, $xml->asXML()); 

Но это ничего не снимает, никаких идей о том, что я сделал не так?

Вот одно из возможных решений ( онлайн-демонстрация ):

 $xml = <<< XML <?xml version='1.0' encoding='utf-8'?> <concerts> <concert> <artist></artist> <date></date> </concert> </concerts> XML; $concerts = simplexml_load_string($xml); foreach ($concerts->xpath('/*/concert/*') as $child) { unset($child[0]); } echo $concerts->asXML(); с $xml = <<< XML <?xml version='1.0' encoding='utf-8'?> <concerts> <concert> <artist></artist> <date></date> </concert> </concerts> XML; $concerts = simplexml_load_string($xml); foreach ($concerts->xpath('/*/concert/*') as $child) { unset($child[0]); } echo $concerts->asXML(); 

Пометка этого CW, потому что, как удалить элементы, указан в моем поставленном closevote, и этот ответ только расширяется. И теперь это было отредактировано, показывая метод самореференции для удаления узла элемента SimpleXML, как указано в ответе на вопрос «Удалить ребенка с определенным атрибутом в SimpleXML for PHP», который также является возможным дубликатом.

Отменяя $ lol, вы только отменили переменную, созданную вами на основе детей, а не самих детей.

Глядя на запрос xPath, вы, скорее всего, захотите отменить ($ xml ["concerts"]);

Кроме того, я не уверен, что это просто потому, что вы дали небольшую часть кода, но $ entries никогда не определяется, поэтому вы никогда не войдете в цикл.

Вы можете использовать XQuery для выполнения задания:

 let $concerts := <concerts> <concert> <artist></artist> <date></date> </concert> </concerts> return { delete node $concerts/concert/*; $concerts } 

Вы можете попробовать пример выше в прямом эфире по адресу http://www.zorba-xquery.com/html/demo#OLYylalXNV+ZVQbkRPVULLkd4Lo=

Инструкции по установке расширения XQuery PHP доступны по адресу http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery.