Problême avec du XML (j'en ai marre!)

cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 25 janv. 2008 à 23:35
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 30 janv. 2008 à 19:29
Bonsoir à tous,

Après maintenant 2 mois de bloquage sur mon problême, et après avoir dientifié le vrai problême, je repose un message en vous expliquant clairement ce qu'il se passe. J'ai trouvé le problême, mais je n'ai toujours pas de solution depuis maintenant 2 semaines.

Voila le problême, j'ai un fichier xml que j'utilise pour créer une form avec ces contrôle et tout. j'ai 2 Name, Object et Property. Object définit un contrôle, et tout les property qui sont dedans sont les propriété du contrôle.

Je vous décrie ce que fais mon code pour que vous comprenniez le problême après:
Quand il lit le type d'un object, il donne une valeur à une variable qui dit si c'est une form, un bouton ou autre. Quand il y a un property, il donne la valeur du property au contrôle qui est en cour, et on le sais grace à la variable dont je parle juste au dessus.

Le problême, c'est qu'il arrive que j'ai un Object, qui se trouve dans un autre Object. Le code vois un nouveau object, donc il idéntifie le type du contrôle. Mais c'est pas ce qu'il faut, car après, il ne peu plus s'occuper des Property du contrôle précédent.

Bon, je ne suis pas sur que je vous ai bien expliqué, mais ça vous éclaircira surment si je vous donne mon code vb.net et celui en xml:

PublicSub CONVERT(ByVal FileName AsString)
Dim ctrl AsNew Control ' variable pour la création d'un contrôle
Dim forms AsNew Form 'variable pour la création de la formDim type_ctrl AsInteger 0 ' 1 Form et 2 = Contrôle
Dim xr As XmlTextReader = New XmlTextReader(FileName)

DoWhile xr.Read()
SelectCase xr.NodeType
Case XmlNodeType.Element
SelectCase xr.Name
Case "Object" ' Ici, on va identifier le type d'objet, un form, un boutton...ect
SelectCase xr.GetAttribute("type")
Case "System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ' Si cest une form
type_ctrl = 1 '1, c'est une form
forms = New Form
forms.Show()
Case "System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ' Si c'est un bouton
type_ctrl = 2 '2, c'est un contrôle
ctrl = New Button
forms.Controls.Add(ctrl)
EndSelect
Case "Property"
SelectCase xr.GetAttribute("name")
Case "Text" 'Pour la propriété Text du contrôle ou de la Form
If type_ctrl = 1 Then'Si c'est une form
forms.Text = xr.ReadString
EndIf
If type_ctrl = 2 Then'Si c'est un contrôle
ctrl.Text = xr.ReadString
EndIf
EndSelect
EndSelect
Case XmlNodeType.Element
SelectCase xr.Name
Case "Object"
type_ctrl = 0
EndSelect
EndSelect
Loop

EndSub

Et voici celui en XML:

<Objecttype="System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"name="Dialog"children="Controls">
<Objecttype="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"name="Cancel_Button"children="Controls">
<Propertyname="TabIndex">1</Property>
<Propertyname="Size">75, 23</Property>
<Propertyname="Name">Cancel_Button</Property>
<Propertyname="UseVisualStyleBackColor">True</Property>
<Propertyname="Text">Annuler</Property>
<Propertyname="Location">313, 250</Property>
<Propertyname="DataBindings">
<Propertyname="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Propertyname="DialogResult">Cancel</Property>
</Object>
<Objecttype="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"name="OK_Button"children="Controls"><Propertyname="TabIndex">0</Property>
<Propertyname="Size">75, 23</Property>
<Propertyname="Name">OK_Button</Property>
<Propertyname="UseVisualStyleBackColor">True</Property>
<Propertyname="Text">OK</Property>
<Propertyname="Location">232, 250</Property>
<Propertyname="DataBindings">
<Propertyname="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
</Object>
<Propertyname="ShowIcon">False</Property>
<Propertyname="MaximizeBox">False</Property>
<Propertyname="Text">Boite de dialogue</Property>
<Propertyname="ShowInTaskbar">False</Property>
<Propertyname="Name">Dialog</Property>
<Propertyname="StartPosition">CenterScreen</Property>
<Propertyname="DataBindings">
<Propertyname="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Propertyname="MinimizeBox">False</Property>
<Propertyname="ClientSize">400, 285</Property>
<Propertyname="FormBorderStyle">FixedDialog</Property>
</Object>

MERCI D'AVANCE A TOUS !!!!!!!!

A+++++

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***

10 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 janv. 2008 à 00:36
Salut

Je pense que tu y arriveras mieux en utilisant le dom pour construire ton arbre.
Le dom est plus adapté au travail arborescent

Sinon il faut que tu utilises une stack
tu empiles tes controles et sit tu tombes sur un endelement tu depile et tu trouveras normalement le controle parent

nb element dans la stack
1 form
2 button
2 finbutton
2 button
2 finbutton
1 fin form

En esperant que ca fonctionne
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
26 janv. 2008 à 07:34
Salut,

Merci, ça a l'aire d'être une très bonne idée. Mais euh, j'ai pas tout compris là.

Sa marche comment ce que tu viens de dire? les stack et les dom?

Merci
A+

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 janv. 2008 à 10:58
Salut

Je te présentais 2 solutions

1) utiliser le dom :
http://msdn2.microsoft.com/en-us/library/system.xml.xmldocument.loadxml.aspx
Tout l'arbre xml est monté en mémoire et après tu fais des lectures de la mémoire
avec des selectsinglesnode  et selectnodes
http://msdn2.microsoft.com/en-us/library/system.xml.xmldocument.selectsinglenode.aspx..

2) utiliser conjointement la fermeture d'element et une stack
pour garder la structure de ton code

Mais il me semble que la premiere solution est a priviligier
plus simple et plus maintenable
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
27 janv. 2008 à 13:23
Salut,

Pfff, je n'y arrive pas vraiment, je n'ai pas trop de différence...
ralala...

Merci encore A+

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 janv. 2008 à 21:23
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
28 janv. 2008 à 21:37
Merci,
c'est bizarre, les fichier sont corompue, impossible de lire le projet.... snif... tu as le projet? tu peu me l'envoyer pour voir si ça marche? stp

Merci

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
28 janv. 2008 à 21:44
aaaaaa!!!! ouiiiiiiii!!!! je connais bien ce code là signé par Microsoft. J'ai trouvé l'original sur le MSDN. En fait, mon projet est basé sur ce code là. Mais voila, la désérialisation qu'utilise ce code n'est pas adapté à ce que je voulais faire... Et c'est dans un bute éducatif que je cherche aussi à taper tout les codes qu'il faut sit ut vois ce que je veux dire...

En fait, la désérialisation du xml de ce code là, 1, il est en C#, et le convertir en VB.Net, ça fait pleinde bugs et je n'ai pas les compétence pour les résoudre (j'ai déja essayé). 2, cette désérialisation, enfin, je ne sais pas trop, mais je toruv qu'il y a un truc bizarre dedans, il fait plein de truc dont je ne vois pas l'utilité, en même temp, il désérialise pour créer en fait un concepteur de vue au final, et il y a plein de truc qui font que je vais galèrer énormément pour arranger ça comme je veux. Et 3, maintenant que tu sais sur quel code je me suis basé, je t'explique que je veux désérialiser ce xml à ma façon afin de faire un aperçut de cette form, et ausi de générer le code VB.Net permettant d'avoir cette form.

voilâ^^

A+

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
30 janv. 2008 à 12:05
?

Svp, je vous avoue que je suis de plus en plus pressé

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 janv. 2008 à 19:14
Je ne comprends pas trop ce que tu veux tout  est dans le code source
Si tu veux convertir en vb, il suffit de passer par reflector et de decompiler en vb.net

Dans ton message n-2 , il y a pas de question.

Et dans ton message n-1, ça encorage pas à répondre.
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
30 janv. 2008 à 19:29
Lol, c'est vrai.
bon, et si je reprennait clairement une bone fois pour toute.

le code que tu m'as donnée, je l'ai déja, copier/coller dans mon programme et un tout petit peu modifier. Bon, j'ai essayé reflector pour convertir les dll du projet en VB.Net (dans ces dll, ce trouve le code de désérialisation du xml)... Mais reflector me met une centaine d'erreur dans les codes, et sachant que je n'ai aucune connaissance en C#, et bien je galère.

Bon, le code que j'ai créer, moi, et bien je sais où se toruve l'erreur, mais je ne parvient pas à le résoudre. Le problême, c'est que le code s'emmele les pinceaux car, comme tu l'as dis plus haut, il ne fait pas la différence entre les Property d'un object de type button ou form... J'ai beau essayer plein de chose, je n'arrive pas à lui faire comprendre que tel Property est en rapport avec tel Object...

Je ne vois pas trop comment je peu mieu tourné ça pour être plus précit, sinon, ej vous donne carrément les codes de mon projet (mais ça va être galère, récement, je me suis dison amusé à compter les ligne de code du projet, 16 000 lignes....)

ps: pour mon prmeier message, si je ne mettait pas le code VB.Net et le XML, vous n'auriez rien compris....

Merci encore une fois

*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
0
Rejoignez-nous