[.net] pb de boucle ...

pb de boucle ... [.net] - C#/.NET managed - Programmation

Marsh Posté le 06-10-2003 à 19:31:07    

Voila j'ai un pb :
J'aimerais lire un XML, et tous ses noeuds enfants et ainsi de suite mais je ne connais pas le nombre d'enfant,
 
voici ma fonction: pour l'instant je n'ai encore pas trop regardé à l'optimiser car je ne vois pas comment on pourrait depasser cette limite
 

Code :
  1. Public Function Remplir() As String
  2.         Dim doc As New XmlDocument
  3.         doc.Load(Dossier & "\xml\" & XmlFile)
  4.         Dim mNodeRoot As XmlNode
  5.         mNodeRoot = doc.DocumentElement
  6.         Remplir &= ToScript("var root = menu.addItem('" & mNodeRoot.Attributes(0).InnerText  & "')" )
  7.         Dim mNodeChild As XmlNode
  8.         mNodeChild = mNodeRoot.FirstChild
  9.         Dim i1 As Integer = 0
  10.         Do Until mNodeChild Is Nothing
  11.             Remplir &= ToScript("var " & mNodeChild.Name & i1.ToString & " = root.addItem('" & mNodeChild.Attributes(0).InnerText  & "')" )
  12.             Dim mNodeChild2 As XmlNode
  13.             mNodeChild2 = mNodeChild.FirstChild
  14.             Dim i2 As Integer = 1
  15.             Do Until mNodeChild2 Is Nothing
  16.                 Remplir &= ToScript("var " & mNodeChild2.Name & i2.ToString & " = " & mNodeChild2.ParentNode.Name & i1.ToString  & "')" )
  17.                 Dim mNodeChild3 As XmlNode
  18.                 mNodeChild3 = mNodeChild2.FirstChild
  19.                 Dim i3 As Integer = 1
  20.                 Do Until mNodeChild3 Is Nothing
  21.                     Remplir &= ToScript("var " & mNodeChild3.Name & i3.ToString & " = " & mNodeChild3.ParentNode.Name & i2.ToString & "')" )
  22.  
  23. ' ainsi de suite, autant qu'il y a d'enfant
  24.                     mNodeChild3 = mNodeChild3.NextSibling
  25.                     i3 += 1
  26.                 Loop
  27.                 mNodeChild2 = mNodeChild2.NextSibling
  28.                 i2 += 1
  29.             Loop
  30.             mNodeChild = mNodeChild.NextSibling
  31.             i1 += 1
  32.         Loop
  33.     End Function


 
et le XML associé :
 

Code :
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Niv1 label="Sommaire" link="" target="">
  3. <Niv2 label="sous-menu1" link="" target="">
  4.  <Niv3 label="sous-sous-menu1" link="" target="">
  5.   <Niv4 label="sous-sous-sous-menu5" link="" target=""></Niv4>
  6.   <Niv4 label="sous-sous-sous-menu6" link="" target="">
  7.    <Niv5 label="sous-sous-sous-sous-menu1d" link="" target=""></Niv5>
  8.   </Niv4>
  9.   <Niv4 label="sous-sous-sous-menu7" link="" target=""></Niv4>
  10.  </Niv3>
  11. </Niv2>
  12. <Niv2 label="Sous-menu2" link="" target="">
  13.  <Niv3 label="sous-sous-menu1" link="" target=""></Niv3>
  14. </Niv2>
  15. <Niv2 label="sous-menu3" link="" target="">
  16.  <Niv3 label="sous-sous-menu1" link="" target=""></Niv3>
  17.  <Niv3 label="sous-sous-menu3" link="" target=""></Niv3>
  18.  <Niv3 label="sous-sous-menu4" link="" target=""></Niv3>
  19. </Niv2>
  20. <Niv2 label="sous-menu4" link="" target=""></Niv2>
  21. </Niv1>


 
Si qqn à une idée ...
 
Une autre petite question :
je regarde les attributes de ces noeud et il ne sont pas forcement tous renseignè :  
mNodeChild5.Attributes(2).InnerText si Attributes(2) n'est pas renseignè, il me ressort une erreur, comment passer outre l'erreur

Reply

Marsh Posté le 06-10-2003 à 19:31:07   

Reply

Marsh Posté le 06-11-2003 à 18:15:36    

utilise une function recursive genre:
 
private void ReadNode(XmlNode root, int parentLevel)
{
 ....
 foreach (XmlNode node in root.ChildNodes)
 {
  ...
  ReadNode(node, parentLevel+1);
  ...
 }
 ...
}

Reply

Marsh Posté le 06-11-2003 à 18:17:03    

if (mNodeChild5.Attributes.Contains("KEY" ))
{
 label.InnerHtml = mNodeChild5.Attributes["KEY"].InnerText;
}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed