2010-11-20 9 views
0

最近、私はxmlコーディングで作業していましたが、問題が発生しました。xmlでchildnodeをparentnodeレベルに移動する方法

<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)私たちが望むの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 = 5)

に行ってきました。このようなXMLを考えると

または

<Lieutenant_Colonel id="2"> 
    <Secretary id="6"/> 
</Lieutenant_Colonel> 
<Lieutenant_Colonel id="3"> 
    <Secretary id="7"/> 
</Lieutenant_Colonel> 
この作業を行うにはどのように0

これはかなり長い彼らなので、 - 私は他の質問を参照する必要が

答えて

0

に私を助けてください。まず、この機能を検討:大佐とその大佐のための秘書のIDを指定し

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を取得できない場合は、xpathを回避してIDの指定を削除して大佐の子として秘書を削除することができます。

がremoveNodeコードは少し長いですので、私はあなたにPHPでのSimpleXMLを使ってノードを削除する方法についてthis質問を与える必要があります。

私はいくつかの助けになることを願っています!

関連する問題