2010-11-20 8 views
0

Récemment, j'ai travaillé avec le codage XML, et le problème est arrivé.Comment déplacer childnode au niveau parentnode dans xml?

Étant donné le xml comme ceci:

<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> 

maintenant le colonel (id = 1) est allé avec le secrétaire (id = 5)

le xml que nous voulons est comme

<!-- <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> --> 

ou

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

Comment faire ce travail?

s'il vous plaît aidez-moi

Répondre

0

Ceci est une assez longue eux, donc je vais se référer d'autres questions. Considérons d'abord cette fonction:

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; 
} 

Compte tenu de l'identification d'un colonel et un secrétaire de ce colonel, il supprime le secrétaire, il sauve les enfants du colonel pour enlever le colonel et le retour des enfants. Après cela, vous pouvez à nouveau insérer vos éléments dans le noeud racine si vous le souhaitez. Si vous ne pouvez pas avoir l'ID de secrétaire au moment de la suppression du colonel, vous pouvez contourner le xpath pour supprimer le secrétaire en tant qu'enfant du colonel en supprimant la spécification id. Le code RemoveNode est un peu long, donc je vais devoir vous donner this question sur la façon de supprimer des nœuds en utilisant SimpleXML en PHP.

J'espère pouvoir vous aider!