DOMDocument: корневой элемент получает только один тег, а не оба

следующий код должен создать файл XML, используя DOMDocument с корневым элементом:

$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;

$root = $doc->createElement('gallery');
$doc->appendChild($root);

$doc->save($filename);

но я просто получаю один элемент тега (с этой косой чертой «/») вместо

<gallery> </gallery>

Мне удалось получить

<gallery> A content </gallery>

если я использую createElement со вторым параметром ($ doc-> createElement (‘gallery’, ‘A content’)), но так как это корневой элемент, мне не нужно помещать туда контент.

Как это исправить?

Спасибо

0

Решение

<gallery /> эквивалентно <gallery></gallery>, Если вы добавите контент к «элементу с одним тегом», он будет отображаться с начальным и конечным тегами, а также между ними.

1

Другие решения

<gallery/> это короткая форма сериализации для пустого тега. При загрузке в DOM это приведет к тому же узлу. Так что в большинстве случаев это просто не имеет значения, и вы можете использовать короткую пустую форму.

Однако вы можете потребовать от DOM сохранить пустые теги в длинной форме:

$document = new DOMDocument('1.0', 'utf-8');
$document->formatOutput = true;

$root = $document->appendChild(
$document->createElement('gallery')
);

// echo $document->save($filename, LIBXML_NOEMPTYTAG);
echo $document->saveXml(null, LIBXML_NOEMPTYTAG);

Выход:

<?xml version="1.0" encoding="utf-8"?>
<gallery></gallery>
1

По вопросам рекламы [email protected]