Ajouter un noeud dans un noeud bien précis

Eléphanteau du PHP | 13 Messages

30 mai 2013, 15:51

Bonjour,
je m'en remet à vous, après plusieurs semaines de recherche et de tirage de cheveux ....

Voilà je suis entrain de créer des fichiers xml via des formulaires php (jusqu'ici pas de problème),

Seulement à un moment, je doit créer un noeud qui doit être placer à l'intérrieur d'un noeud donc la valeur d'un de ces attribut et preciser, il ne doit donc pas être ajouter dans n'importe qu'elle noeud.

Voilà ce que j'ai fait jusqu'à present :

Mon doc .xml
<?xml version="1.0" encoding="utf-8"?>
<QuestionnaireConfiguration>
  <Title text="Equipe"/>
  <Page legend="Equipe Human Factor" description="Liste des personne de l'equipe de human factors">
    <Line type="QUESTION" text="Nom">
      <input type="text" name="Nom" value="Nom"/>
    </Line>
  </Page>
</QuestionnaireConfiguration>
Mon formulaire
<form method="POST" action="ajoutquestion.php">

            <!-- Je retrouve la valeur de l'attribut legend de tous les noeuds Page afin de savoir dans quelle noeud je devrai rajouter-->
        	<input type="hidden" name="choixquestionnaire" value="<?php echo $load; ?>" />

        	<label for="choixpage">Choissisez dans quel page vous voulez mettre votre question :</label>
        	<select id="choixpage" name="choixpage">
        		<?php
        		foreach( $searchNode as $searchNode )
				{ 
					$valueLegend = $searchNode->getAttribute('legend'); // Je cherche tous les attribut legend 
					echo '<option>'.$valueLegend.'</option>'; // j'extrait la valeur de l'attribut
				}
        		?>
        	</select>


        	<fieldset>
                    <legend>Création d'une question</legend>
                    <p>
                        <label for="type_line">Type de la ligne :</label>
                        <select name="type_line">
                            <option>QUESTION</option>
                            <option>NEXT_PAGE_BTN</option>
                            <option>FINISH_BTN</option>
                        </select>
                    </p>

                    <p>
                        <label for="text_line">Question :</label>
                        <input type="text" id="text_line" name="text_line"/>
                    </p>

                    <div id="saisies">
                    </div>

                    <Input Type="Button" Value="Ajouter une réponse" OnClick="Ajouter()">


                </fieldset>
                <p>
                    <input type="submit" name="action" value="Ajouter une autre question" />
                    <input type="submit" name="action" value="Ajouter une autre page" />
                    <input type="submit" name="action" value="Finir le questionnaire" />
                </p>

        </form>

        <!-- je crée un script pour pouvoir ajouter autant de réponse que je souhaite --> 
        <script type="text/javascript">
            var nlignes = 1;
            function Ajouter(){
                nlignes++;
                saisies.insertAdjacentHTML('BeforeEnd','<p><label for="type_input">Type de réponse :</label><select name="type_input_'+nlignes+'"><option> </option><option>text</option><option>textarea</option><option>radio</option><option>checkbox</option></select></p><p><label for="name_input_'+nlignes+'">Nom de la réponse :</label><input type=text name="name_input_'+nlignes+'" id="name_input_'+nlignes+'"/></p><p><label for="value_input_'+nlignes+'">Valeur de la réponse :</label><input type=text name="value_input_'+nlignes+'" id="value_input_'+nlignes+'"/></p>');
            };
        </script>
Mon doc .php
$dom = new DOMDocument();
$load = $_POST['choixquestionnaire']; // je vais chercher le fichier dans lequel je souhaite ajouter mes noeuds
$load = str_replace(' ', '_', $load);


$dom->preserveWhiteSpace = false;

$dom->load('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml'); // je load le document en dom

$simplexml = simplexml_load_file('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml'); // je load en simpleXml

$nompage = $_POST['choixpage'];

$page = $simplexml->xpath('//Page[@legend="$nompage"]'); // je vais chercher le noeud dans lequel je souhaite ajouter un child

/********AJOUT LINE****************/
$line = $dom->createElement('Line'); // je crée un noeud Line

$typeLine = $dom->createAttribute('type'); //Je crée un attribut type
$typeLine->value = $_POST['type_line']; //Je vais chercher la valeur de mon attribut
$line->appendChild($typeLine); // j'ajoute l'attribut type et sa valeur aux noeud Line

if (!empty($_POST['text_line'])){ //Si le champs text_line et bien rempli
    $textLine = $dom->createAttribute('text'); // Je créer un attribut text
    $textLine->value = $_POST['text_line']; // je vais chercher la valeur de l'attribut
    $line->appendChild($textLine); // J'ajoute l'attibut et sa valeur au noeud Line
}

$page->appendChild($line); // J'ajoute le noeud Line dans la page qui à la bonne valeur d'attribut

/**********************************/

/********AJOUT INPUT****************/
for($i=1; $i<100; $i++){ // Tant qu'il y a des questions ajouter

    if (!empty($_POST['type_input_'.$i]) && !empty($_POST['name_input_'.$i]) && !empty($_POST['value_input_'.$i])){ //Si les champs ne sont pas vide       
        $input = $dom->createElement('input'); // je crée un noeud input

            $typeInput = $dom->createAttribute('type'); // je crée un attribut
            $typeInput->value = $_POST['type_input_'.$i];// j evais chercher sa valeur
            $input->appendChild($typeInput); // j'ajoute l'attribut et sa valeur au noeud input

            $nameInput = $dom->createAttribute('name');
            $nameInput->value = $_POST['name_input_'.$i];
            $input->appendChild($nameInput);

            $valueInput = $dom->createAttribute('value');
            $valueInput->value = $_POST['value_input_'.$i];
            $input->appendChild($valueInput);

        $line->appendChild($input); // je met le noeud input dans le noeud Line
    }

}

/***********************************/


$dom->formatOutput = true;
$dom->normalizeDocument();

J'espère que vous pourrez m'aidez parce que je désespère un peu ...

MErci !

Eléphanteau du PHP | 13 Messages

03 juin 2013, 08:09

Personne ne peux m'aider ?