2016-06-14 3 views
0

PHP (SimpleXML)로 XML 노드를 삭제하려고합니다. SimpleXML, PHP로 XML 노드 삭제

내 XML입니다 :

<?xml version="1.0"?> 
<items> 
    <a> 
     <name>A1</name> 
     <b> 
      <title>Item1</title> 
      <url>item1</url> 
     </b> 
     <b> 
      <title>Item2</title> 
      <url>item2</url> 
     </b> 
     <b> 
      <title>Item3</title> 
      <url>item3</url> 
     </b> 
    </a> 
    <a> 
     <name>A2</name> 
     <b> 
      <title>Item1</title> 
      <url>item1</url> 
     </b> 
    </a> 
</items>  

이 내 PHP 코드 :

<?php 
    $xml = simplexml_load_file($_GET["xml"]); 
    $sxe = new SimpleXMLElement($xml->asXML()); 


    $ID = $_GET["ID"]; 
    $i = -1; 
    $num = $_GET["num"]; 

    foreach ($sxe->children() as $var) { 
     if ($var == $ID) { 
      foreach ($var->children() as $data) { 
       if ($data == "link") { 
        $i++; 

        if ($i == $num) { 
         if (! empty($sxe)) { 
          unset($sxe[0]); 
         } 
        } 
       } 
      } 
     } 
    } 

    $sxe->asXML($_GET["xml"]); 
?> 

이 코드는 $의 ID의 데이터를 찾습니다 (예를 들어, $ ID = "A1") . 노드가 삭제하려고하는 노드는 (와)를 가진 노드이며 # $ num 노드입니다.

예 : $ ID = "A1"와 $ NUM = 1, 는 제목 "항목 2"및 URL "항목 2"로 노드를 삭제해야하는 경우.

내가 뭘 잘못하고 있니?

감사합니다.

답변

0

노드를 찾으려면 xpath를 사용하십시오. 귀하의 예제로는

//a[name="A1"]/b[2] 

하고

$sxe = simplexml_load_string($xml); 
$node = $sxe->xpath('//a[name="'. $ID .'"]/b['. $num .']'); 
$dom=dom_import_simplexml($node[0]); 
$dom->parentNode->removeChild($dom); 
echo $sxe->asXML(); 
+0

XML 파일 인수 str $가 XML을 변경 DomDocument 방법 removeChild를 사용할 것인가? (file.xml) 또는 $ str에로드해야합니까? ($ XML = simplexml_load_file은 ($는 _ [ "XML"]) GET, 는 $ str을 = 새로운 SimpleXMLElement는 ($ XML-> asXML은());) –

+0

은 경고 :() simplexml_load_string : 법인 : 라인 1 : 파서 ​​오류 : 시작 태그 예상 '<'라인 deletenode.php 72 경고없는 :) (simplexml_load_string : 라인 72에서 deletenode.php links.xml 경고 : simplexml_load_string()^deletenode.php 72 치명적인 행 오류 : 72 행의 deleteenode.php에있는 비 객체의 멤버 함수 xpath()를 호출하십시오. –

+0

코드를 저장할 수 있습니다 :'$ xml = simplexml_load_file ($ xx = simplexml_load_string ($ xml) $ _GET [ "xml"]); $의 SXE = 새로운 SimpleXMLElement ($ XML-> asXML());' – splash58