>백엔드 개발 >PHP 튜토리얼 >XPath를 사용하여 SimpleXML에서 상위 노드를 제거하는 방법은 무엇입니까?

XPath를 사용하여 SimpleXML에서 상위 노드를 제거하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 12:56:29220검색

How to Remove a Parent Node in SimpleXML Using XPath?

SimpleXML - XPath 노드 제거

질문:

SimpleXML에서 다음과 연결된 상위 노드를 어떻게 삭제할 수 있습니까? 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.