Wie kann ich das ändern den Namen eines Elements im DOM?
In PHP mit DOM, ich habe ein DomElement-Objekt repräsentiert ein <Identität/> - element.
Habe ich von einem Fall, wo muss ich dies ändern, so die element-name </person>, aber immer den gleichen child-Elemente und-Attribute.
Was wäre der einfachste Weg, das zu ändern element name eines DomElement-und halten Ihre Kinder und Attribute?
Edit: ich habe gerade eine sehr ähnliche Frage (obwohl es nicht sehr gute Antworten).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte verwenden Sie
importNode()
zu kopieren, die childNodes von Ihrem<identity>
element, um eine neu erstellte<person>
element?Vielleicht so etwas wie, dass funktionieren würde, oder Sie könnten versuchen, mit
cloneChild()
.Edit: Tatsächlich, ich habe gerade festgestellt, dass die ursprüngliche Funktion verlieren würde, die Platzierung der Knoten. Wie pro die Frage thomasrutter verbunden
replaceChild()
verwendet werden soll.Dank Ihrer post konnte ich schnell lösen Sie das gleiche Problem für mich. Allerdings hatte ich ein DOM_NOT_FOUND Ausnahme. Dies ist wohl eine PHP-Version Problem, da der original-Beitrag ist 5 Jahre alt.
Laut der PHP-Dokumentation (Feb 2014)
So, ich habe die Stelle
mit
Hier ist die komplette Funktion (getestet):
Es ist auch erwähnenswert, dass, wenn Sie diese Funktion verwenden möchten, sollten Sie durchqueren den DOM-Baum in umgekehrter Reihenfolge, wie in anderen stellen.
UPDATE: Nach Monaten der Verwendung und Aktualisierung der PHP Version 5.5.15 auf windows, ich hatte eine Fehlermeldung besagt, dass $attr konnte nicht in eine Zeichenfolge konvertiert werden. Also habe ich aktualisiert, Dritte for-each-Schleife oben.
$node
muss nicht unbedingt ein Eltern-element, vor allem beim import von nicht wohlgeformten html-Zeichenfolgen wie<div>Partial HTML</div>
. In diesen Fällen sollte man nennen dienormalize()
Methode auf dieDOMDocument
vor.HINWEIS: ich habe versucht Calvin den code und irgendwie war für mich aber nicht ganz. Wenn der tag-ich war zu ersetzen hatte, verschachtelte tags, einige Kind-tags manchmal verloren gehen.
Der Grund ist, dass childNodes ist eine live DOMNodeList der die untergeordneten Knoten eines Knotens, und
appendChild
bewegt sich der Knoten um den DOM, was sich auf die Liste zu bestellen. Wenn Sie geradeforeach
auf eine childNodes kann die Schleife überspringen einige Kinder.Meine Lösung war die Verwendung einer while-Schleife. Auf diese Weise müssen Sie nicht haben, um kopieren Sie alle Knoten in ein array.
Habe ich alles verpackt in einer praktischen Funktion, die einen string und gibt einen string zurück und soll die Arbeit mit utf-8. Im folgenden wird geprüft, PHP 5.5.9.
Drucke: