carver3
carver3

Reputation: 13

Appending an Element multiple times in DOMDocument

Is there a way to use repeated child elements in DOMDOCUMENT in PHP? In my case, the Billing and Shipping information will always be the same. For example:

$fullname = "John Doe";
$xml = new DOMDocument();
$xml_billing = $xml->createElement("Billing");
$xml_shipping = $xml->createElement("Shipping");
$xml_fullname = $xml->createElement("FullName");
$xml_fullname->nodeValue = $fullname;
$xml_billing->appendChild($xml_fullname);
$xml_shipping->appendChild($xml_fullname);

However, in this case, it removes the element from Billing and leaves it only in Shipping.

Upvotes: 1

Views: 1450

Answers (1)

hakre
hakre

Reputation: 197682

It might not be obvious for you, but if you append the same element to another parent it is moved around in a DOMDocument.

You can prevent that easily by using the created FullName element as a prototype and clone it for the append operation:

$xml_billing->appendChild(clone $xml_fullname);
$xml_shipping->appendChild(clone $xml_fullname);

This then does what you were trying to achieve if I read your question right.


And another hint as I just see it: The following two lines:

$xml_fullname = $xml->createElement("FullName");
$xml_fullname->nodeValue = $fullname;

You can write as one:

$xml_fullname = $xml->createElement("FullName", $fullname);

Hope this helps.

Upvotes: 4

Related Questions