2012-07-27 2 views
0

안녕하세요!PHP XML : 노드 값에 따라 요소와 모든 자식을 제거 하시겠습니까?

내가 문제, 임 (차일) 요소를 제거하는 하나 개의 하위 값에 따라이 :

<?xml version="1.0" encoding="UTF-8"?> 
    <Businesses> 
    <Business NAME="busin1"> 
    <CHILD ID="30"><title>child Title</title> 
    <description>Child Description</description> 
    <urlToSite>http://www.MySite.co.il</urlToSite> 
    <endtime>20120720103000</endtime> 
    <starttime>20120710191500</starttime> 
    </CHILD> 
<CHILD>...</CHILD> 
<CHILD>...</CHILD> 
</Business> 
    </Businesses> 

지금 내가 특정 "아이를 모두 제거해야합니다 을 다음은 XML 샘플입니다 여기

YYYYMMDDHHMMSS

입니다 : ENDTIME ENDTIME "는 형식의 날짜입니다"(ENDTIME "

특정 값과 같은 값을 현재 또는 간단히)는"그럼 오래 ""의 해당 요소 (. 포함 어린이) " 내 첫 시도 (성공) :

$doc = new DOMDocument; 
    $doc->load('MyXML.xml'); //The XML Above 

    $thedocument = $doc->documentElement; 

    //this gives you a list of the childs 
    $list = $thedocument->getElementsByTagName('CHILD'); 

    //figure out which ones you want -- assign it to a variable (ie: $nodeToRemove) 
    $nodeToRemove = null; 
$time=date("YmdHis",time()); 
    foreach ($list as $domElement){ 
$attrValue = $domElement->childNodes->item('endtime')->nodeValue; //not Sure about this!! 
     if ($attrValue > $time) { 
     $nodeToRemove = $domElement; 
     } 
    } 

    //Now remove it. 
    if ($nodeToRemove != null) 
    $thedocument->removeChild($nodeToRemove); 
    echo $doc->saveXML(); 

대단히 감사합니다.

답변

0

안녕하세요! 연구 ... 마지막으로 내가 발견 한 문제의 전체 하루를 보낸 후

..

먼저 당신의 도움이 당신에게 마이클 감사합니다.

다음은 최종 작업 코드 : 난 아무데도 그것을 발견 havn't는

<?php 

$doc = new DOMDocument; 
$doc->load('MyXML.xml'); 

$maxTime = date("YmdHis", time()); 

$xpath = new DOMXPath($doc); 
$q = "/Businesses/Bisiness/CHILD/endtime[. < {$maxTime}]"; 
foreach ($xpath->query($q) as $node) { 
    $businessNode = $node->parentNode; 
    $businessesNode = $businessNode->parentNode; 
    $businessesNode->removeChild($businessNode); 
} 

// inserting to variable ONLY 
$last = $doc->saveXml(); 
// IMPORTANT!! - we have to rewrite to XML the Results back!! 
file_put_contents('MyXML.xml', $last) 
?> 

, 그래서 나는이 :)

1

문서 노드를 쿼리하려면 XPath를 사용하십시오. 이 시도 :

$maxTime = date("YmdHis", time()); 

$doc = new DOMDocument(); 
$doc->load("MyXML.xml"); 

$xpath = new DOMXPath($doc); 
$q = "/Businesses/Bisiness/CHILD/endtime[. > {$maxTime}]"; 
foreach ($xpath->query($q) as $node) { 
    $businessNode = $node->parentNode; 
    $businessesNode = $businessNode->parentNode; 
    $businessesNode->removeChild($businessNode); 
} 

Here's 멋진 페이지를 XPath를 예제와 함께.

+0

안녕 다시 .. 당신에게 도움이되기를 바랍니다! 난 당신의 코드를 시도하고 여전히 작동하지 않습니다 : (나는 이해할 수 없다 ... 귀하의 코드에서 발견 한 유일한 문제는> {$ maxTime} 올바른 getAttribute ('ID');"그리고 나는 올바른 자식 ID를 볼 수 있지만 노드에서 제거하지 않는다 "echo $ doc-> saveXml() ; "결국 ... 어떤 제안이라도? 고마워! – EranLevi

관련 문제