Xpath для удаления пустых узлов в XML с дочерними узлами - PullRequest
0 голосов
/ 20 декабря 2018

Я использую следующий код, в котором я передаю 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...