2015-02-04 3 views
2

PHP의 DOMDocument을 사용하여 새 xml 파일을 작성합니다.PHP DOMDocument에 요소가 없으면 요소 만들기

부모/자식 배열을 반복하여 내 xml에 추가해야합니다. 부모가 존재하지 않으면, 그것을 만들고 자식을 추가하고 싶습니다. 존재하는 경우 해당 요소에 자식을 추가하려고합니다. 기본적으로

이 : 기존 요소를 검색 할 수

// create category element 
$categories = $dom->createElement('categories'); 

// add each element to $categories 
foreach($arr as $parent => $child){ 

    // try to find pre-existing parent 
    $tmp_parent = $categories->some_function_to_find_child($parent); 

    // ..or create new parent 
    if($tmp_parent == null) { 
    $tmp_parent = $categories->appendElement($parent); 
    } 

    // add child 
    $tmp_parent->appendElement($child); 

} 

// add $categories to $dom 
$dom->appendChild($categories); 
+0

정확히 무엇입니까? –

+0

어떻게해야합니까? 아래쪽에 추가 한 코드는 내 목표를 설명하는 psudo 코드입니다. – doub1ejack

+0

@ doub1ejack 배열 키는 고유해야합니다. 요소를 뒤집거나 두 값을 모두 저장해야합니다. – ThW

답변

2

사용 DOMXPath : 내가 좋아하는 뭔가를 찾고 있어요

<categories> 
    <fruit> 
     <apple/> 
     <kiwi/> 
    </fruit> 
    <car> 
     <toyota/> 
     <ford/> 
    </car> 
    </categories> 

:

$arr = array(
    'fruit' => 'apple', 
    'car' => 'toyota', 
    'fruit' => 'kiwi', 
    'car' => 'ford' 
) 

요구이되기 위해 :

$dom = new DOMDocument(); 
$xpath = new DOMXPath($dom); 

// create category element 
$categories = $dom->createElement('categories'); 

// add each element to $categories 
foreach ($arr as $parent => $child) { 

    // try to find pre-existing parent 
    $tmp_parent = $xpath->query($parent, $categories); 

    // ..or create new parent 
    if ($tmp_parent->length == 0) { 
     $categories->appendChild($dom->createElement($parent)); 
    } else { 
     // add child 
     $tmp_parent->item(0)->appendChild($dom->createElement($child)); 
    } 
} 

// add $categories to $dom 
$dom->appendChild($categories); 

print_r($dom->saveXML()); 
+0

좋아요, 이것이 설정된 방식으로, 카테고리가 이미 존재하면 새 아이가 추가되지 않습니다. – doub1ejack

+0

@ doub1ejack 무슨 뜻이야? 필자가 작성한 코드는 기본 아이디어를 의사 코드로 간주하여 사용자의 요구에 맞춰야합니다. –

+0

네, 고마워요. 그것이 내가 한 일이며 잘 작동합니다. 그 주석을 미래의 다른 사람들을위한 메모라고 생각하십시오. 사람들이 쉽게 작동해야한다고 쉽게 추측 할 수있는 실제 코드와 충분히 유사합니다. – doub1ejack

관련 문제