I use php DOMDocument to create and save XML file.
here is my code
$doc = new DOMDocument();
$document = $doc->createElement('DOCUMENT');
$document->nodeValue = '';
$doc->appendChild($document);
$order = $doc->createElement('ORDER');
$order->nodeValue = '';
$doc->appendChild($order);
$ele = $doc->createElement('Reportvariable1');
$ele->nodeValue = '';
$doc->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');
$ele->nodeValue = '';
$doc->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');
$ele->nodeValue = '';
$doc->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');
$ele->nodeValue = '';
$doc->appendChild($ele);
$doc->appendChild($ele);
$doc->save('order_xml/Order_.xml');
its Output is simple like this :
<?xml version="1.0"?>
<DOCUMENT></DOCUMENT>
<ORDER></ORDER>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
How do I create nested nodes like this ?
<?xml version="1.0"?>
<DOCUMENT>
<ORDER>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
<Reportvariable1></Reportvariable1>
</ORDER>
</DOCUMENT>
You use 3 steps to add a new node to the DOM.
appendChild() to the parent (document or element)appendChild() returns the node. So you can nest the create* call.
Don't set DOMElement::$nodeValue. It has a non standard behaviour and needs special escaping. Use the DOMElement::$textContent property. Or create a text node and append it.
$dom = new DOMDocument();
$document = $dom->appendChild(
$dom->createElement('DOCUMENT')
);
$order = $document->appendChild(
$dom->createElement('ORDER')
);
// 3 nodes setting text content
for ($i = 1; $i <= 3; $i++) {
$order
->appendChild(
$dom->createElement('Reportvariable1')
)
->textContent = 'some text content' . $i;
}
// 3 nodes appending a text node
for ($i = 3; $i <= 6; $i++) {
$order
->appendChild(
$dom->createElement('Reportvariable1')
)
->appendChild(
$dom->createTextNode('some text content' . $i)
);
}
$dom->formatOutput = true;
echo $dom->saveXml();
Output:
<?xml version="1.0"?>
<DOCUMENT>
<ORDER>
<Reportvariable1>some text content1</Reportvariable1>
<Reportvariable1>some text content2</Reportvariable1>
<Reportvariable1>some text content3</Reportvariable1>
<Reportvariable1>some text content4</Reportvariable1>
<Reportvariable1>some text content5</Reportvariable1>
<Reportvariable1>some text content6</Reportvariable1>
</ORDER>
</DOCUMENT>
Change your code to:-
$doc = new DOMDocument();
$document = $doc->createElement('DOCUMENT');$document->nodeValue = '';$doc->appendChild($document);
$order = $doc->createElement('ORDER');$order->nodeValue = '';$document->appendChild($order);
$ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele);
$ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele);
$doc->save('order_xml/Order_.xml');
You will get the desired output
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With