1

これは問題に関連するコードです:

$prep = "<select><option>Option 1</option><option selected>Option 1</option></select>"
$td = $dom->createElement('td',$prep);

解決:

$f = $this->dom->createDocumentFragment();
$f->appendXML($prep);

しかし、それでも大きな問題です。値 ex: を持たない属性selected(disabledと書くことはできませ んselected="selected") では、createElementそうすることができません。

値のない属性を使用して、今のように 1000 エラーを取得しない方法: Warning: DOMDocumentFragment::appendXML() [domdocumentfragment.appendxml]: Entity: line 1: parser error : Specification mandate value for attribute selected Warning: DOMDocumentFragment::appendXML() [domdocumentfragment.appendxml]: Entity: line 2: parser error : chunk is not well balanced

selectedこれは、属性を渡す場合、または無効になっている場合に発生します。

4

2 に答える 2

1

私は修正することを我慢できません。PHP の DOMDocument モデルの実装では、文字列はalsoオブジェクトです (これにより、nodeValue に依存するのではなく、文字列を簡単に選択できるようになり、ほとんどの場合、作業が楽になります)。

テキストを含む表の行を挿入するには、次の操作を行います。

$f = new DOMDocument();
$table = $f->createElement("table");
$f->appendChild($table);
$tbody = $f->createElement("tbody");
$table->appendChild($tbody);
$tr = $f->createElement("tr");
$tbody->appendChild($tr);
$td = $f->createElement("td");
$tr->appendChild($td);

// Magic happens here
$td->appendChild(new DOMText("this is my text"));

ちなみに、適切に挿入された場合、空の属性は保持されます - ただし、selected="selected" を自由に使用できます。そのコンテンツがその属性名の小文字バージョンである場合、それはまだ有効です ( HTML 5 ではどういう意味ですか?属性はブール属性ですか? )。ブール値の true としてフラグを立てたい場合は、次を使用します。

$elem->setAttribute("selected","");

(コード+モードを実行しただけで、shutopを使用する必要なくエラーはまったく発生しませんでした)

于 2013-04-15T10:10:20.960 に答える
0

答えは自分で見つけました。
$this->dom = new DOMDocument; 他のすべてのコードとビルドするもの
$tbody = $this->dom->createElement('tbody');
$td = $this->dom->createElement('td');

TD に HTML コードを配置するには、単に貼り付けたり、->nodeValue = '' で値を設定したりすることはできません。HTML としてではなく、テキストとして出力されます。

$prep = "<strong>lalala</strong>";またはその他の html 文字列 // フラグメントを作成して追加します
@@$f = $this->dom->createDocumentFragment(); @@$f->appendXML($prep);

$td->appendChild($f);
-- 動作します! ただし、注意してください ::<option selected>またはのような HTML タグへの空の属性は、<option disabled>エラーを引き起こし、失敗します。
属性を として設定しようとしないでくださいselected="selected"。HTML/XML パーサーが原因で、これも失敗します。

SOcreateDocumentFragment()は、selected、disabled、その他のような空の値属性がない限り、非常にうまく機能します

于 2013-04-14T11:22:17.393 に答える