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 needs special escaping. It is much more secure to create a text node and append it.
$dom = new DOMDocument();
$document = $dom->appendChild(
$dom->createElement('DOCUMENT')
);
$order = $document->appendChild(
$dom->createElement('ORDER')
);
for ($i = 1; $i < 5; $i++) {
$reportVariable = $order->appendChild(
$dom->createElement('Reportvariable1')
);
// add some text content
$reportVariable->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>
</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