Hello,
In PHP with DOM, I have a DomElement object which represents an <identity/> element.
I have one case where I need to change this so its element name is <person/>, but keep the same child elements and attributes.
What would be the simplest way of changing an element name of a DomElement and keeping its children and attributes?
Edit: I have just found a very similar question (though it doesn't have very good answers).
-
Could you use
importNode()
to copy the childNodes of your<identity>
element to a newly created<person>
element?function changeName($node, $name) { $newnode = $node->ownerDocument->createElement($name); foreach ($node->childNodes as $child){ $child = $node->ownerDocument->importNode($child, true); $newnode->appendChild($child, true); } foreach ($node->attributes as $attrName => $attrNode) { $newnode->setAttribute($attrName, $attrNode); } $newnode->ownerDocument->replaceChild($newnode, $node); return $newnode; } $domElement = changeName($domElement, 'person');
Perhaps something like that would work, or you could try using
cloneChild()
.Edit: Actually, I just realized that the original function would lose the placement of the node. As per the question thomasrutter linked to,
replaceChild()
should be used.thomasrutter : I may be missing something, but it doesn't look like you can change the node name with importNode()Calvin : See the code I just added.thomasrutter : Thanks for that. I ended up using a solution very similar to this.
0 comments:
Post a Comment