3

クラス内に多数の dom 操作関数があります。これらの関数の 1 つは、特定のノードに一意の ID を割り当てます。

$resource_info_node->setAttribute('id', 'resource_'.$this->ids);
$details['id'] = 'resource_'.$this->ids;
$details['node'] = $resource_info_node;
$this->resource_nodes['resource_'.$this->ids] = $details;
$this->ids += 1;

後で、それらのノードを検索して変更したいと思います。私が試してみました :

$current_node = $this->resource_nodes[$id]['node'];

print_r() を実行すると、このノードが元のノードの複製であることがわかります。元のノードの属性を持っていますが、DOM ツリーの一部ではありません。で同じ結果が得られます:

$this->content->getElementById($id);

ノード参照を配列に格納することに基づいて、このすべてを行ったと思います。それはいいことだと思いました。そうでない場合でも、その後 getElementByID() を使用すると、dom 内のノードが返されるはずです。

PHPでは、すべてのオブジェクトが参照によって渡されると思いました。DOM ノードを含む。実際に何が起こっているかをテストする方法についてのアイデア。

編集 :

まあ私は使用しました:

$this->xpath->query('//*[@id]');

これにより、ID を持つ適切な数のアイテムが返されました。ノードを編集すると、DOM ツリーにノードが表示されません。

$current_node = &$this->resource_nodes[$id]['node'];

参照構文を使用しても影響はありませんでした。

最も奇妙な部分は、get elementById() が dom のノードを返さないことです。これには、parentNode がないことを除いて、すべての適切な属性があります。

修正 - 回答なし:

参照または getElementById() の代わりに xpath を使用しました。

4

1 に答える 1

3

参照の明示性を使用します。

$current_node = &$this->resource_nodes[$id]['node'];

そして修正$current_node

于 2012-11-12T17:51:39.770 に答える