2012-02-23 4 views
0

PHP로 xml 파일의 특정 노드를 편집하고 삭제하는 데 많은 시간을 낭비했습니다. 이제 노드를 성공적으로 삭제했지만, 노드를 편집하려고하면 마지막 노드 만 업데이트됩니다.PHP로 XML의 특정 노드를 편집하고 삭제하는 방법

내 xml 파일은 아래에 주어진다

:

<?xml version="1.0"?> 
    <reviews> 
    <product name="NokiaN9White"> 
     <user name="testuser" id="02232012062451"> 
     <username>[email protected]</username> 
     <date_post>23-02-2012</date_post> 
     <date_update>23-02-2012</date_update> 
     <review>Hello dear.</review> 
     </user> 
     <user name="testuser" id="02232012062521"> 
     <username>[email protected]</username> 
     <date_post>23-02-2012</date_post> 
     <date_update>23-02-2012</date_update> 
     <review>Mrr</review> 
     </user> 
     <user name="testuser" id="02232012062523"> 
     <username>[email protected]</username> 
     <date_post>23-02-2012</date_post> 
     <date_update>23-02-2012</date_update> 
     <review>adfasdf</review> 
     </user> 
    </product> 
</reviews> 

이 데이터를 편집 내 코드는 다음과 같습니다

$xmlDoc = new DOMDocument(); 
$xmlDoc->load(dirname(__FILE__)."/reviews.xml"); 

$products = $xmlDoc->getElementsByTagName("product"); 
    foreach($products as $product) 
    { 
     $prdoductN = $product->getAttribute("name"); 
     if($prdoductN == $product_name){ 

      $users = $product->getElementsByTagName("user"); 

      $userR = get_userName($_SESSION['userName']); 
      foreach($users as $user){ 
       $userName = $user->getAttribute("name"); 
       $review_id = $user->getAttribute("id"); 

       if($userName == $userR && $review_id == $r_id){ 

        $current_date = date('d-m-Y'); 

        $eventN = $user->getElementsByTagName("date_update"); 
        $eventN->item(0)->nodeValue = $current_date; 

        $eventC = $user->getElementsByTagName("review"); 
        $eventC->item(0)->nodeValue = $comments; 

       } 
      } 

      $xmlDoc->formatOutput = true; 
      //$xmlDoc->saveXML(); // This will return the XML as a string 
      $xmlDoc->save(dirname(__FILE__)."/reviews.xml"); 
     } 
    } 

답변

0

당신은 당신의 예를 구현하는 조르바에서 제공하는 PHP 확장을 사용할 수 있습니다

declare namespace a = "http://www.zorba-xquery.com/annotations"; 

declare variable $doc := <reviews>...</reviews>; 

declare %a:sequential function local:remove-user(
    $doc as element(reviews), $name as xs:string, $id as xs:string 
) as element(reviews) 
{ 
    delete node $doc//user[@name = $name and @id = $id]; 
    $doc 
}; 

local:remove-user($doc, "testuser", "02232012062523") 

예제 라이브를 http://www.zorba-xquery.com/html/demo#2awjZFgWFxoIi7uE2J4HgwUQUuA=

0123에서 시도 할 수 있습니다. 감사합니다,뿐만 아니라 다른 파일을 설치하려면이 필요 .. (즉 : 일부 .DLL .sa 화일) PHP와 XQuery를 확장을 설치하는 방법에

명령이 http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery

+0

에서 사용할 수 있습니다. 난 단지 PHP 로이 일을해야합니다. –

관련 문제