Я использую следующий код, в котором я передаю dom, и это возвращает XML без пустых узлов
/**
* Remove Empty Tags
*
* @return void
* @author Fahad Sheikh
**/
public function remove_empty_tags($dom)
{
// Remove Empty Tags
$xpath = new DOMXPath($dom);
foreach( $xpath->query('//*[not(node())]') as $node ) {
$node->parentNode->removeChild($node);
}
}
Но это возвращает следующий XML, где он по какой-то причине объединяет значения вложенного тега XMLи удаляет их тег.
<formxml>
<type>Potential customer</type>
<origin>Content</origin>
<source>test source<medium>test medium</medium>
<campaign>test campaign</campaign>
<matchtype>terms</matchtype>
<test>valueonevaluetwo</test>
<keyword>test term</keyword>
<ad>test</ad>
</formxml>
Вместо этого это должно быть:
<formxml>
<type>Potential customer</type>
<origin>Content</origin>
<source>test source<medium>test medium</medium>
<campaign>test campaign</campaign>
<matchtype>terms</matchtype>
<test>
<testvarone>valueone</testvarone>
<testvartwo>valuetwo</testvartwo>
</test>
<keyword>test term</keyword>
<ad>test</ad>
</formxml>
Это решение было упомянуто здесь:
Удалить пустые теги из XMLс PHP