質問:
SimpleXML で、XPath ノードに関連付けられた親ノードを削除するにはどうすればよいですか? XPath を通じて特定の要素が特定されました?
問題の説明:
次のコードを使用して特定の item_id を持つ項目を検索して削除すると失敗します:
<code class="php">$xml = simplexml_load_file($filename); $data = $xml->xpath('//items/info[item_id="' . $item_id . '"]'); $parent = $data[0]->xpath("parent::*"); unset($parent);</code>
unset($parent) ステートメントは親の
答え:
オブジェクト変数 (この場合は $parent) に対して unset() を直接呼び出すと、オブジェクト参照のみが削除され、ノード自体は削除されません。
DOMDocument を使用した解決策:
<code class="php">$doc = new DOMDOcument; $doc->loadxml(...XML string...); $item_id = 456; $xpath = new DOMXPath($doc); foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) { $node->parentNode->removeChild($node); }</code>
このループは、一致する
出力:
<code class="xml"><?xml version="1.0"?> <foo> <items> <info> <item_id>123</item_id> </info> </items> <items> <info> <item_id>789</item_id> </info> </items> </foo></code>
以上がXPath を使用して SimpleXML の親ノードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。