PHP DOM XML добавить элемент в родителя

177
01 февраля 2020, 17:00

я ищу способ добавления элемента в родительский . Структура xml документа такова:

<?xml version="1.0" encoding="utf-8"?>
<content>
  <article id="1">
    <file>01.jpg</file>
    <title>Фото 1</title>
    <description>Описание 1</description>
  </article>
  <article id="2">
    <file>02.jpg</file>
    <title>Фото 2</title>
    <description>Описание 2</description>
  </article>
...
</content>

Уже написана часть кода, но проблем в том, что он добавляет элемент после родительского:

$dom = new DOMDocument('1.0', 'utf-8'); // DOM
$dom->loadXML($xml->asXML());
$article = $dom->appendChild($dom->createElement('article'));
$attr = $article->setAttribute('id', $cnt+1);
$file = $article->appendChild($dom->createElement('file'));
$title = $article->appendChild($dom->createElement('title'));
$description = $article->appendChild($dom->createElement('description'));
$file->appendChild($dom->createTextNode($file_post));
$title->appendChild($dom->createTextNode($title_post));
$description->appendChild($dom->createTextNode($desc_post));
$dom->formatOutput = true;
echo $dom->saveXML();

Подскажите пожалуйста, как можно добавить элемент в родительский?

P.S. Решение на SimpleXML не писать, это ломает оформление кода!

Answer 1

И так... представляю вашему вниманию 2 решения, которые я всё таки смог сделать:

/*
$article = $xml->addChild('article'); // SimpleXML
$article->addAttribute('id', $cnt+1);
$article->addChild('file', $file_post);
$article->addChild('title', $title_post);
$article->addChild('description', $desc_post);
*/
$dom = new DOMDocument('1.0', 'utf-8'); // DOM
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
$article = $dom->documentElement->appendChild($dom->createElement('article'));
$attr = $article->setAttribute('id', $cnt+1);
$file = $article->appendChild($dom->createElement('file'));
$title = $article->appendChild($dom->createElement('title'));
$description = $article->appendChild($dom->createElement('description'));
$file->appendChild($dom->createTextNode($file_post));
$title->appendChild($dom->createTextNode($title_post));
$description->appendChild($dom->createTextNode($desc_post));
echo $dom->saveXML();

Кому нужен SimpleXML - сможет расскомментировать выше запись и закомментировать DOM. Результат:

READ ALSO
Не получается удаление пробелов preg_replace

Не получается удаление пробелов preg_replace

Пытаюсь удалить пробелы с помощью preg_replace(), обычно это не вызывает трудностей, однако в этот раз я потерпел фиаско!

169
PHP Сессии и авторизация

PHP Сессии и авторизация

Вопрос у меня такой: Можно ли использовать сессии для идентификации пользователя? Те заходя на главную страницу из куков берётся логин и пароль,...

140
Date Format c in timestamp?

Date Format c in timestamp?

Как преобразовать формат даты тип "C" в timestamp?

147
PHP - что значит &lt;=

PHP - что значит <=

В коде наткнулся на такую строчку:

174