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 !