IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Création récursive d'un document xml


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Création récursive d'un document xml
    Bonjour à tous,

    j'essaye de créer un fichier xml de manière récursive. ca devrait donner quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public function xmlRecursion(ByVal i as integer) as xmldocument
      Dim res as xmldocument
      Dim xmlAtt As XmlAttribute
      Dim node, cnode As XmlElement
     
      Dim dec As XmlDeclaration = res.CreateXmlDeclaration("1.0", Nothing, Nothing)
      res.AppendChild(dec)
     
      cnode = res.CreateElement("Recursion")
      xmlAtt = res.CreateAttribute("level")
      xmlAtt.Value = i
      cnode.attributes.append(xmlAtt)
      res.AppendChild(cnode)
     
      If i>1 then
        node = xmlRecursion(i-1).DocumentElement
        node = res.OwnerDocument.ImportNode(node, True)
        cnode.AppendChild(node)
      End if
     
      Return res
    End function
    Ce code ne fonctionne pas, quelqu'un pourrait me filer un coup de main plz.

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    On a pas de boule de cristal, et on ne lit pas dans les pensées...
    Il faudrait donc que tu précises :
    - ce que tu cherches à faire exactement ("créer un fichier xml de manière récursive", ça peut vouloir dire tout et n'importe quoi)
    - ce que tu entends pas "ne fonctionne pas" (est-ce qu'il se produit une erreur ? si oui, laquelle ? sinon, quel sont le résultat attendu et le résultat obtenu ?)

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Désolé si ma question était incompréhensible, je vais essayer d'être plus clair...

    j'essaye d'obtenir un fichier xml du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Recursion level=3>
      <Recursion level=2>
        <Recursion level=1 />
      </Recursion>
    </Recursion>
    et le code du post précédent me renvoie une erreur NullPointerException à l'endroit où je fais l'appel récursif (je l'ai essayé entre temps).

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    En fait, je n'étais pas loin de la solution...

    au cas où, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public shared function xmlRecursion(ByVal i as integer) as xmldocument
    	Dim res, cxml as new xmldocument
    	Dim xmlAtt As XmlAttribute
    	Dim node, cnode As XmlElement
     
    	Dim dec As XmlDeclaration = res.CreateXmlDeclaration("1.0", Nothing, Nothing)
    	res.AppendChild(dec)
     
    	cnode = res.CreateElement("Recursion")
    	xmlAtt = res.CreateAttribute("level")
    	xmlAtt.Value = i
    	cnode.attributes.append(xmlAtt)
    	res.AppendChild(cnode)
     
    	If i>1 then
    		cxml = xmlRecursion( i - 1)
    		node = cxml.DocumentElement
    		node = res.ImportNode(node, True)
    		cnode.AppendChild(node)
    	End if
    	Return res
    End function
    Merci pour ta réponse et encore désolé pour le manque de claretée...

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par orfeu Voir le message
    me renvoie une erreur NullPointerException
    Si tu faisais du Java ce serait possible, mais en .NET ça m'étonnerait... il doit plutôt s'agir d'une NullReferenceException

    Par contre, j'ai testé et chez moi c'est à la ligne 6 que ça pète (logique, puisque tu n'as jamais initialisé la variable res). Il faut initialiser res au début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim res as New XmlDocument
    De plus, la propriété OwnerDocument renvoie toujours null (Nothing) pour un XmlDocument, il faut donc appeler ImportNode directement sur res :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    node = res.ImportNode(node, True)
    Avec ça, ça fonctionne... par contre c'est pas très propre de créer un nouveau XmlDocument à chaque fois... J'aurais plutôt fait comme ça, avec Linq to XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function XmlRecursion(ByVal level As Integer) As XElement
        If level = 0 Then Return Nothing
        Return new XElement("Recursion", New XAttribute("level", level), XmlRecursion(level - 1))
    End Function
     
    ...
     
    Dim doc = new XDocument(XmlRecursion(3))
    En plus c'est nettement plus simple

    Si tu préfères, tu peux aussi utiliser la syntaxe XML littérale de VB.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function XmlRecursion(ByVal level As Integer) As XElement
        If level = 0 Then Return Nothing
        Return <Recursion level=<%= level %>>
                    <%= XmlRecursion(level - 1) %>
               </Recursion>
    End Function

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Si tu faisais du Java ce serait possible, mais en .NET ça m'étonnerait... il doit plutôt s'agir d'une NullReferenceException
    C'est bien vrai que je suis une quiche en VB, j'ai plus l'habitude de coder en java, d'où l'erreur (de toute manière ça correspond à la même chose...)

    Merci, ton code mérite le respect! Je savais pas qu'on pouvais faire des choses aussi élégantes avec du VB...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM XML] Création d'un document XML
    Par niou142 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/02/2008, 09h11
  2. [D7 XML] Création dynamique Document XML
    Par PhD13 dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2007, 13h56
  3. Réponses: 2
    Dernier message: 03/05/2007, 09h38
  4. Validation d'un document XML avant sa création??
    Par mardona dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 27/01/2006, 15h33
  5. [DOM XML][XSLT] Création d'un document XML avec PHP
    Par ToxiZz dans le forum Bibliothèques et frameworks
    Réponses: 21
    Dernier message: 16/01/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo