クラス内に多数の 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 を使用しました。