2011-01-20 18 views

Odpowiedz

14

Szukasz

- DOMDocumentFragment::appendXML — Append raw XML data

przykładu z podręcznika:

$doc = new DOMDocument(); 
$doc->loadXML("<root/>"); 
$f = $doc->createDocumentFragment(); 
$f->appendXML("<foo>text</foo><bar>text2</bar>"); 
$doc->documentElement->appendChild($f); 
echo $doc->saveXML(); 
+0

dziękuję, działało jak czar !!!! – fabio

+1

Uwaga: Dane wejściowe HTML muszą być poprawne, w przeciwnym razie wystąpią błędy. Sposób, w jaki to zrobiłem, to utworzenie kolejnego dokumentu, załadowanie do niego kodu HTML (jako HTML, a nie XML), a następnie ponowne zaimportowanie nowo utworzonych węzłów z powrotem do mojego oryginalnego dokumentu. –

+0

Jeśli "wynik konwersji nie powiodła się z powodu błędu konwersji" na "DOMDocument :: saveHTML()" w wyniku dodania kodu zewnętrznego, musisz wymusić konwersję na określony standard kodowania, np. przez 'utf8_encode()'. – kenorb

5

Jeśli nie mają odniesienia do document root w zakresie, zawsze można do niego dostęp za pośrednictwem ownerDocument właściwość dowolnego węzła:

$frag = $trElement->ownerDocument->createDocumentFragment(); 
$frag->appendXML("<a href='?select_user=4'>Username</a>"); 
$trElement->appendChild($frag); 
1

Tak, można to zrobić z DOMDocument::createDocumentFragment:

$fragment = $dom->createDocumentFragment(); 
$fragment->appendXML('<a href="select_user=4">Username</a>'); 
$element->appendChild($fragment); 

W tym przypadku byłoby prościej zrobić to z normalnym createElement rozmowy:

$el = $dom->createElement('a', 'Username'); 
$el->setAttribute('href', 'select_user=4'); 
$element->appendChild($el); 

W każdym przypadku $element jest DOM element, do którego chcesz dołączyć swój kod.

+0

"W takim przypadku prostsze byłoby zrobienie tego przy normalnym wywołaniu createElement:", nie jest to moim przypadkiem, ponieważ w mojej aplikacji mogę mieć dowolne wejście, więc fragment jest w porządku. – fabio

+2

@fabio W takim razie jesteś. Upewnij się jednak, że oczyszczasz dane wejściowe ... – lonesomeday