Добавить узел в переменную XML и сохранить его - PullRequest
0 голосов
/ 29 августа 2018

Я хочу добавить узел XML, т. Е. <name>B07BZFZV8D</name>, в переменную XML перед его сохранением.
Я хочу добавить узел «name» внутри элемента «Self».

#Previously i use to save it directly like this, 

$Response        #this is the respnse from api

$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($Response);


##saving in file
$myfile = file_put_contents('data.xml', $Response.PHP_EOL , FILE_APPEND | LOCK_EX);

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Использование кода @ThW: Необходимо изменить функциональность Create Element

$document = new DOMDocument;
$document->preserveWhiteSpace = FALSE;
$document->loadXML($xmlString);
$xpath = new DOMXpath($document);
// fetch the first Data element inside the Report document element
foreach ($xpath->evaluate('/Report/Data[1]') as $data) {
// create the name element with value and append it
$xmlElement = $document->createElement('name', 'Vivian');
$data->appendChild($xmlElement);
}
$document->formatOutput = TRUE;
echo $document->saveXML();

У меня работает с php7.0. Проверьте, работает ли он для вас.

0 голосов
/ 29 августа 2018

В DOM вы используете методы объекта документа для создания узла и методы родительского узла для вставки / добавления его в иерархию.

DOMDocument имеет create* методы для различных типов узлов (элемент, текст, раздел cdata, комментарий, ...). Родительские узлы (элемент, документ, фрагмент) имеют такие методы, как appendChild и insertBefore для их добавления / удаления.

Xpath может использоваться для извлечения узлов из DOM.

$document = new DOMDocument;
$document->preserveWhiteSpace = FALSE;
$document->loadXML($xmlString);
$xpath = new DOMXpath($document);

// fetch the first Data element inside the Report document element
foreach ($xpath->evaluate('/Report/Data[1]') as $data) {
    // create the name element and append it
    $name = $data->appendChild($document->createElement('name'));
    // create a node for the text content and append it
    $name->appendChild($document->createTextNode('Vivian'));
}

$document->formatOutput = TRUE;
echo $document->saveXML();

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<Report>
  <Data>
    <id>87236</id>
    <purchase>3</purchase>
    <address>XXXXXXXX</address>
    <name>Vivian</name>
  </Data> 
</Report>
...