ホームページ  >  記事  >  バックエンド開発  >  構造全体を失わずに SimpleXML の XPath ノードを削除するにはどうすればよいですか?

構造全体を失わずに SimpleXML の XPath ノードを削除するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 00:21:02510ブラウズ

How to Remove an XPath Node in SimpleXML Without Losing the Entire Structure?

SimpleXML を使用して XPath ノードを削除する方法

SimpleXML では、XPath クエリを使用して XML ノードを検索して削除するのが難しい場合があります。この記事では、XPath 検索によって特定された親ノードを削除する問題について説明します。

次の例を考えてみましょう:

<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 に格納されているオブジェクトへの参照が削除されるだけなので、ノードは削除されません。

解決策は、このタスクでは DOMDocument の使用に戻すことです:

<code class="php">$doc = new DOMDocument;
$doc->loadxml('<foo>
  <items>
    <info>
      <item_id>123</item_id>
    </info>
  </items>
  <items>
    <info>
      <item_id>456</item_id>
    </info>
  </items>
  <items>
    <info>
      <item_id>789</item_id>
    </info>
  </items>
</foo>');
$item_id = 456;

$xpath = new DOMXpath($doc);
foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) {
  $node->parentNode->removeChild($node);
}
echo $doc->savexml();</code>

このコードは を削除します。指定された を含むノードXML ドキュメントから。これは、removeChild() メソッドを使用して、親からノードを削除します。

以上が構造全体を失わずに SimpleXML の XPath ノードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。