Ich manipuliere ein kurzes HTML-Snippet mit XPath; Wenn ich das geänderte Snippet mit $ doc- & gt; saveHTML () zurückgebe, wird DOCTYPE
hinzugefügt, und HTML / BODY
tags umschließt die Ausgabe. Ich möchte diese entfernen, aber alle Kinder behalten, indem ich nur die DOMDocument-Funktionen verwende. Zum Beispiel:
Dies erzeugt:
%Vor%Ich habe einige einfache Tricks versucht, wie zum Beispiel:
%Vor%Bisher entfernt nur DOCTYPE und ersetzt HTML durch BODY. Was jedoch übrig bleibt, ist Körper & gt; variable Anzahl von Elementen an diesem Punkt.
Wie entferne ich das <body>
-Tag, behalte aber alle seiner untergeordneten Elemente, da sie variabel strukturiert sind, auf eine saubere Art und Weise mit PHPs DOM-Manipulation?
Hier ist eine Version, die DOMDocument nicht erweitert, obwohl ich glaube, dass die Erweiterung der richtige Ansatz ist, da Sie versuchen, Funktionen zu erreichen, die nicht in die DOM-API integriert sind.
Hinweis: Ich interpretiere "sauber" und "ohne Problemumgehungen", indem ich alle Änderungen an der DOM-API behalte. Sobald Sie auf die String-Manipulation tippen, ist das ein Workaround-Gebiet.
Wie in der ursprünglichen Antwort verwende ich DOMDocumentFragment, um mehrere Knoten auf der Stammebene zu manipulieren. Es findet keine String-Manipulation statt, was für mich kein Workaround ist.
%Vor%Diese Lösung ist ziemlich langwierig, aber weil sie das DOM erweitert, um Ihren Endcode so kurz wie möglich zu halten.
sliceOutNode
ist der Ort, an dem die Magie passiert. Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben:
saveHTML
kann eine Teilmenge des Dokuments ausgeben, was bedeutet, dass wir sie bitten können, jeden untergeordneten Knoten einzeln auszugeben, indem wir body durchlaufen.
Dies ist vielleicht keine elegante Lösung, aber es funktioniert. Alternativ können wir alle untergeordneten Knoten innerhalb eines Containerelements umbrechen (z. B. div
) und nur diesen Container ausgeben (aber das Container-Tag wird in die Ausgabe eingeschlossen).
Hier, wie ich es gemacht habe:
- Schnelle Hilfsfunktion, die Ihnen HTML-Inhalte für bestimmte DOM-Elemente bietet
%Vor%- Suchen Sie den Body-Knoten in Ihrem Dokument und holen Sie sich den Inhalt
%Vor%UPDATE 1:
Einige zusätzliche Informationen: Seit PHP / 5.3.6 akzeptiert DOMDocument- & gt; saveHTML () einen optionalen DOMNode-Parameter ähnlich wie DOMDocument- & gt; saveXML (). Sie können
tun %Vor%für andere, hilft die Hilfsfunktion
Tags und Links php xpath domdocument