как удалить узел XML, если у него нет дочерних узлов, и он пуст - PullRequest
0 голосов
/ 01 июня 2018

Я создаю узлы xml с условиями и хочу удалить узел, если у него нет дочерних узлов:

<main>
  <tags> 
    <tag></tag>
    <tag>hello</tag>
    <tag>hello1</tag>
  </tags>
</main>

Я хочу получить этот вывод перед сохранением xml:

<main>
  <tags> 
    <tag>hello</tag>
    <tag>hello1</tag>
  </tags>
</main>

пожалуйста, игнорируйте имена узлов: если я удаляю, это удаляет, но конечный тег не удаляется, как </tag> все еще присутствует после удаления:

$doc = new DOMDocument;
$doc->load($path);

$element = $doc->documentElement;

$elementtodelete = $element->getElementsByTagName('OthersInc')->item(0);

if(! $elementtodelete->hasChildNodes()) {
    $oldelement = $elementtodelete->parentNode->removeChild($elementtodelete);
}

1 Ответ

0 голосов
/ 01 июня 2018

проверьте этот код

<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->loadxml('<main>
      <tags> 
        <tag></tag>
        <tag>hello</tag>
        <tag>hello1</tag>
      </tags>
    </main>');

$xpath = new DOMXPath($doc);

foreach( $xpath->query('//*[not(node())]') as $node ) {
    $node->parentNode->removeChild($node);
}

$doc->formatOutput = true;
echo $doc->savexml();

проверьте желаемый вывод

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