나는 한 번만 실행되는 foreach 루프를 가지고 있으며 저에게 어려움이 있습니다.SimpleXML 노드 제거
1 : 다음 XML 파일을로드하고, "코드"노드를 통해 반복해야 제가
2 ("구매", "삭제"또는 "요구"중 어느 하나)의 상태 값의 어레이를로드 자신의 상태를 업데이트,하지만 새로운 코드 인 경우
<content>
.... lots of stuff
<codes>
<code date="xxx" status="request">xxxxx</code>
.. repeat ...
</codes>
</content>
.... I은 다음 하나
XML 구조에 이동하기 전에 그것을 제거하려면 "삭제"및 PHP 코드는 ... .
$newstatus = $_POST['updates'];
$file = '../apps/templates/'.$folder.'/layout.xml';
$xml2 = simplexml_load_file($file);
foreach($xml2->codes->code as $code){
if($code['status'] == "delete") {
$dom=dom_import_simplexml($code);
$dom->parentNode->removeChild($dom);
}
}
$xml2->asXml($file);
삭제 확인을 디버그 할 수 있도록 업데이트를 일시적으로 제거했습니다. 이것은 모두 작동하지만 첫 번째 삭제 만 제거하고 foreach 루프 일지라도 다른 모든 삭제는 남겨 둡니다. 도움을 주시면 감사하겠습니다.
중복 질문은 http://stackoverflow.com/questions/3418197/how-to-remove-a-node-if-it-exists-with-simplexml?rq=1에서 답을 확인하십시오. –
SimpleXML에서 [특정 속성을 가진 자식 제거 (*)] (* (http://stackoverflow.com/a/262556/367456))에서이 코드를 통해 복사 한 것일 수 있습니다. PHP] (http://stackoverflow.com/q/262351/367456) *. 문제는 주어진 답이 불안정하다는 것입니다. 이 코드의 문제점은 iterator가 삭제 된 후에 만 단일 삭제를 위해 작성된다는 것입니다. 'iterator_to_array' 또는 xpath를 사용하여 특정의 simplexml의 경우 먼저 배열로 변환해야합니다. http://stackoverflow.com/a/16062633/367456 – hakre