ホームページ > バックエンド開発 > PHPチュートリアル > XPath を使用して SimpleXML の親ノードを削除するにはどうすればよいですか?

XPath を使用して SimpleXML の親ノードを削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-26 12:56:29
オリジナル
219 人が閲覧しました

How to Remove a Parent Node in SimpleXML Using XPath?

SimpleXML - XPath ノードの削除

質問:

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) ステートメントは親の を削除しません。 node.

答え:

オブジェクト変数 (この場合は $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>
ログイン後にコピー

このループは、一致する を反復処理します。ノードを削除し、親ノードを削除し、$doc オブジェクトを更新します。

出力:

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート