7 votes

La récursivité avec les littéraux XML en VB.NET est-elle possible ?

J'ai une classe appelée Profil qui possède quelques propriétés simples, puis il peut avoir une collection de Élément de profil qui possède à nouveau quelques propriétés simples et qui peut avoir une collection de Élément de profil (RECURSION).

J'essaie maintenant de générer une fonction de sauvegarde très simple en utilisant les littéraux XML fournis avec VB.NET (3.5).

Le code que j'utilise est le suivant :

  Dim xdoc As XDocument = _
            <?xml version="1.0" encoding="utf-8"?>
            <profiles>
                <%= _
                    From p In _Profiles _
                    Select <profile name=<%= p.Name %>>
                               <%= _
                                   From i In p.GetProfileItems _
                                   Select <item>
                                              <name><%= i.Name %></name>
                                              <action><%= i.Action.ToString %></action>
                                              <type><%= i.Type.ToString %></type>
                                              <arguments><%= i.Arguments %></arguments>
                                              <dependencies>
                                                  <%= _
                                                      From d In i.GetDependencies _
                                                      Select <dependency>
                                                                 <name><%= d.Name %></name>
                                                             </dependency> _
                                                  %>
                                              </dependencies>
                                          </item> _
                               %>
                           </profile> _
                %>
            </profiles>

La partie relative à la balise devrait devenir récursive, mais je ne sais pas si cette syntaxe le permet d'une manière ou d'une autre.

Dois-je réécrire tout ce qui évite l'utilisation de XML Literal pour mettre en œuvre la récursivité ?

10voto

CoderDennis Points 7170

La récursivité est l'une des raisons pour lesquelles j'aime VB.NET XML Literals !

Pour effectuer la récursivité, vous avez besoin d'une fonction qui accepte une collection ProfileItems et renvoie un XElement. Vous pouvez ensuite appeler cette fonction de manière récursive à l'intérieur de votre littéral XML.

De plus, pour que la récursivité fonctionne, GetProfileItems et GetDependencies doivent avoir le même nom (renommer l'un d'entre eux) et s'afficher avec la même structure d'éléments Xml. Voici à quoi pourrait ressembler la fonction récursive :

Function GetProfileItemsElement(ByVal Items As List(Of ProfileItem) As XElement
    Return <items>
               <%= From i In Items _
                   Select <item>
                              <name><%= i.Name %></name>
                              <!-- other elements here -->
                              <%= GetProfileItemsElement(i.GetDependencies) %>
                          </item> %>
           </items>
End Function

La récursivité se termine lorsque vous arrivez à un élément qui renvoie une liste vide pour la fonction GetDependencies. Dans ce cas, la fonction imbriquée items sera vide : <items/> . Les littéraux XML sont suffisamment intelligents pour combiner le début et la fin de l'information. items lorsqu'il n'y a pas d'éléments enfants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X