Как дописать данные в файл xml

susl16c

Заблокирован
Сообщения
89
Реакции
12
Баллы
3,310
Подскажите имею такие данные:

Код:
    $xml = new DOMDocument();
    $xml->load('filesdata.xml');
    $xw = xmlwriter_open_memory();
    xmlwriter_set_indent($xw, 1);

    $markers = $xml->getElementsByTagName('RegistrySet');

    echo 'Этап 1';

    foreach ($markers as $xw) {
        echo 'Этап 2';

        xmlwriter_start_element($xw, 'RegistryRecord');
        xmlwriter_start_element($xw, 'Worker');

        xmlwriter_start_element($xw, 'LastName');
        xmlwriter_text($xw, $name);
        xmlwriter_end_element($xw);
        
        xmlwriter_end_element($xw);
        xmlwriter_end_element($xw);
        file_put_contents('filesdata.xml', $xw->outputMemory());

        echo 'Этап 3 Финал';
    }
При записи данных появляется такая ошибка:
Fatal error: Uncaught TypeError: xmlwriter_start_element(): Argument #1 ($writer) must be of type XMLWriter, DOMElement given in
Что я делаю не так ?
 
Дайте пример xml, а также, что есть и как должно быть
 
Последнее редактирование:
Допустим, так:

PHP:
<?php

$xml = new DOMDocument();
$xml->load('filesdata.xml');

$xmlWriter = new XMLWriter;
$xmlWriter->openMemory();
$xmlWriter->setIndent(true);

// Двигаемся по XML структуре
$xmlWriter->startDocument();
$xmlWriter->startElement('RegistrySet');
$xmlWriter->startElement('RegistryRecord');
$xmlWriter->startElement('Worker');

// Записываем поле LastName
$xmlWriter->writeElement('LastName', 'Example');

// Закрываем элементы XML
$xmlWriter->endElement();
$xmlWriter->endDocument();

file_put_contents('filesdata.xml', $xmlWriter->outputMemory());

// Вывод:
/**
 * <?xml version="1.0"?>
 * <RegistrySet>
     * <RegistryRecord>
         * <Worker>
             * <LastName>Example</LastName>
         * </Worker>
     * </RegistryRecord>
 * </RegistrySet>
 */
 
Код:
$markers = $xml->getElementsByTagName('RegistrySet');
Вот это поле означает найти в файле элемент и сделать запись после него
Код:
foreach ($markers as $xw) {
а цикл подразумевает, что каждый раз когда форма отправляет данные будут эти данные записываться в цикле. У вас скорее будет просто записать в файл, как сделать запись в файл и его создать я написал, а вот как циклично потом дописывать данные у меня пока не получается.
 
foreach ($markers as $xw)
тут вы переназначаете переменную $xw, которая должна быть XmlWriter,
как вариант - поменяйте $xw в цикле на $marker
 
При такой структуре появляется ошибка, именно когда используется с циклом:
Fatal error: Uncaught Error: Call to undefined method DOMElement::startDocument()
 
В общем вопрос решил с помощью GPT-чат который и код написал и правки внес которые мне нужны и учел все хотелки, которые на форумах можно долго ждать тут я потратил ну максимум 5 минут, да он еще и визуализирует форму, если нужно в общем шик и блеск.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу