2011-01-20 4 views

答えて

14

:あなたがスコープでdocument rootへの参照を持っていない場合、あなたは常にownerDocument経由でアクセスすることができます

$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

ありがとう、それは魅力のように働いた!! – fabio

+1

注:HTML入力も有効なXMLでなければなりません。さもなければエラーが発生します。私がこれをやったのは、別の文書を作成し、その文書にHTMLを読み込み(XMLではなくHTMLとして)し、新しく作成したノードを元の文書に戻すことです。 –

+0

外部コードを追加した結果、 'DOMDocument :: saveHTML()'に 'conv errorによって出力変換に失敗しました 'というメッセージが表示される場合は、強制的に特定のエンコーディング標準に変換する必要があります。 'utf8_encode()'を介して。 – kenorb

5

任意のノードのプロパティ:

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

はい、あなたはDOMDocument::createDocumentFragmentでこれを行うことができます。

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

をこのような場合には、通常のcreateElementコールでそれを行うために単純になります:

いずれの場合も
$el = $dom->createElement('a', 'Username'); 
$el->setAttribute('href', 'select_user=4'); 
$element->appendChild($el); 

$elementがDOMであります要素にコードを追加します。

+0

"この場合、通常のcreateElementコールでこれを行う方が簡単です:"、これは私のケースではありません。私のアプリでは、任意の入力を持つことができるので、フラグメントはOKです。 – fabio

+2

@fabioそうです。あなたの入力を念入りにしてください... – lonesomeday

関連する問題