Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2007, 17h04   #1
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
Par défaut Editer fichier xml

Bonjour,

dans le but de créer une menu modifiable, je souhaite editer un fichier xml

mon menu se présente comme ceci dans le fichier xml

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE menu [
	<!ELEMENT menu (categorie*)>
	<!ELEMENT categorie (lien*)>
		<!ATTLIST categorie nom CDATA #IMPLIED>
    	<!ELEMENT lien (#PCDATA)>
        	<!ATTLIST lien url CDATA #IMPLIED>
]>
<menu>
	<categorie nom="Technologies">
		<lien url="page1.htm">lien1</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
		<lien url="page4.htm">lien4</lien>
	</categorie>
	<categorie nom="Amso">
		<lien url="page1.htm">lien1</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
		<lien url="page4.htm">lien4</lien>
	</categorie>
	<categorie nom="Infoservice">
		<lien url="page5.htm">lien5</lien>
		<lien url="page6.htm">lien6</lien>
		<lien url="page7.htm">lien7</lien>
		<lien url="page8.htm">lien8</lien>
	</categorie>
	<categorie nom="Microgravure">
		<lien url="page1.htm">également</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
		<lien url="page4.htm">lien4</lien>
	</categorie>
	<categorie nom="Seveur">
		<lien url="page9.htm">lien9</lien>
		<lien url="page10.htm">lien10</lien>
		<lien url="page11.htm">lien11</lien>
		<lien url="page12.htm">lien12</lien>
	</categorie>
	<categorie nom="Tpe">
		<lien url="page1.htm">lien1</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
		<lien url="page4.htm">lien4</lien>
	</categorie>
</menu>
j'arrive à l'afficher correctement en créant des boucles (avec for each)
Ensuite, dans un formulaire, j'affiche les élément de mon menu que je souhaite modifier

Code :
1
2
3
4
5
6
7
8
9
 
for each categorie in objet_categorie
		  response.Write("<h6>" & categorie.attributes(0).value & "</h6><table><tr><td><h2>Nom du lien</h2></td><td><h2>Url</h2></td><td><h2>Supprimer</h2></td></tr>")		  
		  set objet_lien = categorie.childNodes
		  for each lien in objet_lien
		  response.Write("<tr><td><input type=""text"" name=""nom"" value=""" & lien.text & """></td><td><input type=""text"" name=""url"" value=""" & lien.attributes(0).value & """></td><td><input type=""checkbox"" name=""supprimer"" /></td></tr>")			 				
		  next
	response.write("</table>")
  	next
jusqu'ici tout va bien, mais maintenant je dois enregistrer les modifications dans mon fichier .xml.

J'ai créé de mes mains le code qui suit et qui ne veut pas dire grand chose pour parvenir a mes fin :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
'CREATION DE L'ELEMENT menu (racine du doc)
  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument.4.0")
  Set racine = Objet_Document.createElement("menu")
  Objet_Document.appendChild racine
'ici for each quelquechose
 
'recuperation des champs du formulaire
'For each item1 in Request.form(nom).value(0)		  
  Set oMenu = Objet_Document.createElement("categorie")
  oMenu.setAttribute "nom", Technologies 'recuperer les nom dans un boucle
  racine.appendChild oMenu
'For each item1 in Request.form(url).value(0)  
  Set oLien = Objet_Document.createElement("lien")
  oLien.setAttribute "url", Lien1 'recuperer les url dans un boucle
  oMenu.appendChild oLien  
'next	
'next
 
'on a tout recuperé
 
Set PI_xml = Objet_Document.createProcessingInstruction("xml", _
                             "version='1.0' encoding='UTF-8'")
	Objet_Document.insertBefore PI_xml, menu
 
if(request.Form("action") = "enregistrer") then
 
  Objet_Document.save Server.MapPath("../xml/menu.xml")
 
  Set Objet_Document = Nothing	
 
'si on enregistre alors
 
end if
seulement, ça ne marche absolument pas (et c'est surement normal).

Je souhaite remplacer les valeurs que j'affiche dans le formulaire qui sont l'url et le nom du lien dans mon .xml.

Je n'attend pas qu'on fasse le code a ma place mais qu'on me dise par ou aller et ou je fais des erreurs.

Merci d'avance, bon week end

David
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2007, 20h37   #2
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 849
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 849
Points : 5 965
Points : 5 965
Salut,

Une recherche sur le forum avec "XMLDOM" donne quelques resultats qui peuvent t'aider je pense.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 15h09   #3
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
salut,

je suis parti des tutoriels et d'un message trouvé sur ce forum pour faire ce code, seulement comme je débute en xml ainsi qu'en asp, je rencontre beaucoup de difficultés ; j'aurai besoin d'une aide plus personnalisée.

Merci
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 16h11   #4
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 849
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 849
Points : 5 965
Points : 5 965
Citation:
Envoyé par jedebute
seulement, ça ne marche absolument pas (et c'est surement normal).
Qu'est-ce qui ne marche pas?
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 19h47   #5
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
le dernier code ne marche pas et j'ai du mal a le comprendre.

l'idée que j'ai est de récupérer tout ce que je veux modifier dans mon fichier .xml dans un formulaire (ça c'est bon). Ensuite, quand je valide le formulaire, je voudrais que ça modifie le fichier .xml.

Seulement, je ne parviens pas a faire fonctionner le script
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 18h29   #6
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
bon je reformule car visiblement ça n'inspire pas grand monde

voici mon menu :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE menu [
	<!ELEMENT menu (categorie*)>
	<!ELEMENT categorie (lien*)>
		<!ATTLIST categorie nom CDATA #IMPLIED>
    	<!ELEMENT lien (#PCDATA)>
        	<!ATTLIST lien url CDATA #IMPLIED>
]>
<menu>
	<categorie nom="Technologies">
		<lien url="page1.htm">lien1</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
		</categorie>
	<categorie nom="amso">
		<lien url="page1.htm">lien1</lien>
		<lien url="page2.htm">lien2</lien>
		<lien url="page3.htm">lien3</lien>
	</categorie>
	<categorie nom="infoservice">
		<lien url="page5.htm">lien5</lien>
		<lien url="page6.htm">lien6</lien>
		<lien url="page7.htm">lien7</lien>
	</categorie>
	<categorie nom="seveur">
		<lien url="page9.htm">lien9</lien>
		<lien url="page10.htm">lien10</lien>
		<lien url="page11.htm">lien11</lien>
	</categorie>
</menu>
je souhaite grâce à un formulaire, ajouter ou supprimer des noeuds <lien>, j'ai un peu progressé car j'arrive à ajouter un noeud enfin la moitié ex : <lien url="page12.htm"> (manque : lien12</lien>).

Mais j'y ai laissé beaucoup de cheveux.

Mes problèmes sont :

- j'ai du mal a sélectionner les valeurs des noeud et leurs attributs (a me déplacer dans le fichier xml en sorte)
- comment récupérer les valeurs du formulaire pour retranscrire la ligne entière?
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 18h47   #7
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
j'ai résolu mon problème , je posterai le code demain soir dès fois que ça intéresse quelqu'un.
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 23h04   #8
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 2
Points : 2
comme promis, je poste mon code (le fichier xml est toujours le même que dans mon premier post)

-----> afficher le menu

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<%
	dim MyXml
 
	'--- Création d'un objetXML sur le serveur 
	Set MyXml 	= server.CreateObject("MSXML2.DOMDocument.4.0")	
	MyXml.async = false
 
	'--- Chargement du fichier XML
	if MyXml.load(Server.MapPath("../xml/menu.xml")) Then 
	'on fait rien c'est ok 
	Else
  		Response.Write "Un échec s'est produit lors du chargement."
	End If
 
	set objet_categorie = MyXml.documentElement.childNodes
 
	for each categorie in objet_categorie
		  response.Write("<h6>" & categorie.attributes(0).value & "</h6><ul>")		  
		  set objet_lien = categorie.childNodes
		  for each lien in objet_lien
		  	response.Write("<li><a href=""?page=" & lien.attributes(0).value & """>" & lien.text & "</a></li>")			 				
		  next
		  response.write("</ul>")
  	next  	
 %>
---->ajouter un noeud lien de la forme <lien url="page1.htm">lien1</lien> selon les valeur récupérées dans le formulaire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
 <%
    if(request.Form("action") = "enregistrer") then
 
    'traitement du formulaire
    dim NewXml
    dim new_lien    
    '--- Création d'un objetXML sur le serveur 
    Set NewXml  = server.CreateObject("MSXML2.DOMDocument.4.0") 
    NewXml.async = false 
    '--- Chargement du fichier XML
    NewXml.load(Server.MapPath("../xml/menu.xml")) 	   
 
            'valeur que l'on recupere dans le formulaire 
            Lien = Request.Form("nouveau_nom")
            Url = Request.Form("nouvelle_url")
            categ = Request.Form("cat")
			'on teste si le fichier existe déjà
			Set testfichier = Server.CreateObject("Scripting.FileSystemObject" ) 
			if testfichier.fileexists(Server.Mappath("../include/" & Url )) then 
			%>
			<script language="javascript">
			  <!--
			  window.alert ("l'url que vous avez rentré existe déjà, choisissez un nouveau nom d'url");
			  window.history.go(-1);
			  //-->
			  </script>
      		<%
      		else
 
            'creation du nouvel element a rajouter
            Set new_lien = NewXml.createElement("lien")
            Set nom_lien = NewXml.createTextNode(Lien)
 
            new_lien.setAttribute "url", Url
 
            'on se place à la racine du document            
            set root = NewXml.documentElement
 
            set objet_categorie = root.selectSingleNode("categorie[@nom='" & categ & "']")
 
            'on ajoute un nouvel enfant à la fin de la collection
            objet_categorie.AppendChild(new_lien)
            new_lien.appendChild nom_lien
 
            'on enregistre dans le document .xml    
    NewXml.save(Server.MapPath("../xml/menu.xml"))
 
    'end function
    'on crée une page temporaire
    chemin_fichier = Server.MapPath("../include/" & Url)
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile(chemin_fichier, True)
    'on ecrit
    f1.write ("<h1>Cette page est actuellement en construction</h1>")
    'on ferme le fichier
    f1.close    
    end if
	end if
    set f1=nothing
    set fso=nothing
    Set NewXml=Nothing
    set new_lien=nothing        
    %>
----> supprimer un noeud toujours <lien> selon les valeurs récupérées dans le formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
		<%
	'traitement
	dim NewXml	
	'--- Création d'un objetXML sur le serveur 
	Set NewXml 	= server.CreateObject("MSXML2.DOMDocument.4.0")	
	NewXml.async = false 
	'--- Chargement du fichier XML
	NewXml.load(Server.MapPath("../xml/menu.xml"))				
    if(request.Form("action") = "enregistrer") then
 
	        'valeur que l'on recupere dans le formulaire (le nom du lien)
			Lien = Request.Form("adresse")			
 
			'on se place à la racine du document
			set root = NewXml.documentElement
			'on se place sur l'élément enfant a supprimer
			set objNode = root.SelectSingleNode("//menu/categorie/lien[@url='"& Lien &"']")
			'on va au noeud père
			set pere = objNode.parentNode
 
			'if Lien si la page existe			
			'on supprimme le noeud enfant			
			pere.removeChild(objNode) 									
 
			'on enregistre dans le document .xml	
	NewXml.save(Server.MapPath("../xml/menu.xml"))
	Set NewXml = Nothing
	'end function
	'suppression de la page associé
	chemin_fichier = Server.MapPath("../include/" & Lien)
    Set fso = CreateObject("Scripting.FileSystemObject")
	If fso.FileExists(chemin_fichier) Then
    Set f1 = fso.getFile(chemin_fichier)
    'on ecrit
    f1.Delete '
    'on ferme le fichier   	
	end if
    end if             
    %>
note : la fin de ces deux derniers code permet de créer une page dans un dossier / de supprimer la page
jedebute est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h13.


 
 
 
 
Partenaires

Hébergement Web