2010-11-20 49 views
0

最近我一直在使用xml編碼,並且發生了問題。如何在xml中將childnode移動到parentnode級別?

鑑於這樣的XML:

<Colonel id="1"> 
    <Lieutenant_Colonel id="2"> 
    <Secretary id="6"/> 
    </Lieutenant_Colonel> 
    <Lieutenant_Colonel id="3"> 
    <Secretary id="7"/> 
    </Lieutenant_Colonel> 
    <Secretary id="5"/> 
</Colonel> 

現在上校(ID = 1)已經與祕書長(ID = 5)

我們希望XML就像

<!-- <Colonel id="1"> --> 
    <Lieutenant_Colonel id="2"> 
    <Secretary id="6"/> 
    </Lieutenant_Colonel> 
    <Lieutenant_Colonel id="3"> 
    <Secretary id="7"/> 
    </Lieutenant_Colonel> 
    <!-- 
    <Secretary id="5"/> 
</Colonel> --> 

<Lieutenant_Colonel id="2"> 
    <Secretary id="6"/> 
</Lieutenant_Colonel> 
<Lieutenant_Colonel id="3"> 
    <Secretary id="7"/> 
</Lieutenant_Colonel> 

如何做好這項工作?

請幫我

回答

0

這是一個相當長的他們,所以I'll不得不提及的其他問題。首先,考慮這個功能:

function RemoveColonel($id, $secretaryId) 
{ 
    $colXpath = '//colonel[@id="' . $id . '"]'; 
    $secXpath = $colXpath . '/Secretary[@id="' . $secretaryId . '"]'; 

    RemoveNode($secXpath); 
    $colChildren = $rootXml->xpath($colXpath)->children(); 
    $children = array(); 

    foreach ($colChildren as $child){ 
     $children[] = $child; 
    } 

    RemoveNode($colXpath); 
    return $children; 
} 

鑑於上校的ID和爲上校祕書,它將刪除祕書,然後將其保存上校的孩子,除去上校和歸還孩子。之後,如果您願意,您可以再次將您的元素插入根節點。如果在刪除上校時不能擁有祕書ID,則可以通過刪除ID規範來解決xpath以刪除祕書作爲上校的子級。

RemoveNode代碼有點長,所以我必須給你this問題,關於如何使用PHP中的SimpleXML去除節點。

我希望我能有所幫助!

相關問題