2010-02-10 10 views
6

Otrzymuję ciąg znaków XML z określonego źródła. Tworzę obiekt DOMDocument i ładuję do niego ciąg znaków XML (z DOMDocument :: loadXML()). Następnie przechodzę przez dokument XML, używając różnych metod (np. DOMXPath), aż znajdę węzeł (oczywiście DOMNode), którego chcę.Tworzenie DOMDocument z DOMNode w PHP

Ten węzeł ma grupę potomków i chcę wziąć cały węzeł (i jego potomków) i utworzyć z niego nowy obiekt DOMDocument. Nie jestem pewien, jak to zrobić; Próbowałem utworzyć nowy DOMDocument i używając DOMDocument :: importNode(), ale wygląda na to, że działa tylko wtedy, gdy DOMDocument ma już główny węzeł dokumentu, w którym to przypadku dołącza zaimportowany węzeł jako element potomny głównego węzła dokumentu, co nie jest tym, czego chcę - chcę, aby zaimportowany węzeł ZOSTAŁ ZOSTAĆ węzłem głównym DOMDocument.

Być może jest łatwiejszy sposób to zrobić (tj. Łatwiejszy sposób wyodrębnienia części oryginalnego pliku XML, który chcę przekształcić we własny dokument), ale nie wiem. Jestem względnie nowym użytkownikiem DOMDocument, chociaż użyłem SimpleXMLElement na tyle, aby go denerwować.

Odpowiedz

13

Można również utworzyć nowy domDocument i nazywają appendChild() na to, aby dodać węzeł główny:

 
$new = new DomDocument; 
$new->appendChild($new->importNode($node, true)); 

który pracował dla mnie.

0

Nie możesz po prostu utworzyć nowego DOMDocument i załadować XML węzła?

$new = new DOMDocument; 
$new->loadXML($node->ownerDocument->saveXML($node)); 

Nie mogę tego wypróbować, ale to powinno zadziałać.

+0

To powinno działać, ale będzie wymagać serializacji i ponownego analizowania kodu XML, który unika 'importNode()'. – thomasrutter

Powiązane problemy