PHP domDocument для удаления дочерних узлов дочернего узла

Как удалить родительский узел дочернего узла, но сохранить все дочерние элементы?

Файл XML:

<?xml version='1.0'?> <products> <product> <ItemId>531<ItemId> <modelNumber>00000</modelNumber> <categoryPath> <category><name>Category A</name></category> <category><name>Category B</name></category> <category><name>Category C</name></category> <category><name>Category D</name></category> <category><name>Category E</name></category> </categoryPath> </product> </products> 

В принципе, мне нужно удалить узел categoryPath и узел категории, но сохранить все узлы имен внутри узла продукта. То, что я стремлюсь, – это такой документ:

  <?xml version='1.0'?> <products> <product> <ItemId>531<ItemId> <modelNumber>00000</modelNumber> <name>Category A</name> <name>Category B</name> <name>Category C</name> <name>Category D</name> <name>Category E</name> </product> </products> 

Есть ли встроенная функция PHP для этого? Любые указатели будут оценены, я просто не знаю, с чего начать, потому что существует множество дочерних узлов.

благодаря

Хорошим подходом к обработке данных XML является использование средства DOM .

Это очень легко, как только вы познакомитесь с ним. Например:

 <?php // load up your XML $xml = new DOMDocument; $xml->load('input.xml'); // Find all elements you want to replace. Since your data is really simple, // you can do this without much ado. Otherwise you could read up on XPath. // See http://www.php.net/manual/en/class.domxpath.php $elements = $xml->getElementsByTagName('category'); // WARNING: $elements is a "live" list -- it's going to reflect the structure // of the document even as we are modifying it! For this reason, it's // important to write the loop in a way that makes it work correctly in the // presence of such "live updates". while($elements->length) { $category = $elements->item(0); $name = $category->firstChild; // implied by the structure of your XML // replace the category with just the name $category->parentNode->replaceChild($name, $category); } // final result: $result = $xml->saveXML(); 

Смотрите в действии .