Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Caricare file XML in DropDownList

    Ciao ho questo problema e sto diventando matto per riuscire a risolverlo. Praticamente ho un file XML e devo rappresentare tutti i suoi nodi all'interno di una DropDownList. Vi faccio un esempio così è più chiaro.

    Questo è il file XML:
    Codice PHP:
    <DocumentElement>
        <
    Nodi>
            <
    Nodo Nome="Paperino">
                <
    Nodo Nome="Qui"/>
                    <
    Nodo Nome="Zio Paperone"/>
                </
    Nodo>
                <
    Nodo Nome="Quo"/>
                <
    Nodo Nome="Qua"/>
            </
    Nodo>
            <
    Nodo Nome="Topolino">
                <
    Nodo Nome="Minnie"/>
                <
    Nodo Nome="Pluto"/>
                <
    Nodo Nome="Tip"/>
                <
    Nodo Nome="Tap"/>
            </
    Nodo>
        </
    Nodi>
    </
    DocumentElement
    Fin qui è tutto semplice se io sapessi a priori quanti livelli di nodi ci sono. Ma io non so quanti livelli potrebbe avere il nodo Paperino, ad esempio all'interno del nodo Quo potrebbe esserci un altro nodo che a sua volta ha un altro figlio che a sua volta ha un altro figlio......
    Io ora nella DropDownList devo rappresentare gli elementi in questo modo:
    Codice PHP:
    Paperino
    Paperino 
    Qui
    Paperino 
    Qui Zio Paperone
    Paperino 
    Quo
    Paperino 
    Qua
    Topolino
    Topolino 
    Minnie
    Topolino 
    Pluto
    Topolino 
    Tip
    Topolino 
    Tap 
    Spero tanto di essere stato chiaro e che qualcuno possa aiutarmi!!
    Grazie!!
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    codice:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim xmlDoc As New XmlDocument()
            xmlDoc.Load(Server.MapPath("nodi.xml"))
            Dim radice As XmlElement = xmlDoc.DocumentElement()
            Dim nodi As XmlNodeList = Nothing
            Dim nodo As XmlNode = Nothing
            Dim lt As New List(Of String)
            nodo = radice.SelectSingleNode("/DocumentElement/Nodi")
            ElaboraNodi(nodo, lt, -1)
            For Each s As String In lt
                Me.ListBox1.Items.Add(New ListItem(s))
            Next
        End Sub
    
    
        Protected Sub ElaboraNodi(ByVal nodo As XmlNode, ByVal lt As List(Of String), ByVal indice As Integer)
            Dim nodi As XmlNodeList = nodo.SelectNodes("./Nodo")
    
            If indice = -1 Then
                For i As Integer = 0 To nodi.Count - 1
                    nodo = nodi(i)
                    Dim value = nodo.Attributes("Nome").Value
                    lt.Add("/" & value)
                    ElaboraNodi(nodo, lt, lt.Count - 1)
                Next
            Else
                For i As Integer = 0 To nodi.Count - 1
                    nodo = nodi(i)
                    Dim value = nodo.Attributes("Nome").Value
                    lt.Add(lt(indice) & "/" & value)
                    ElaboraNodi(nodo, lt, lt.Count - 1)
                Next
    
            End If
        End Sub
    Pietro

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: così mi pare meglio
    codice:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim xmlDoc As New XmlDocument()
            xmlDoc.Load(Server.MapPath("nodi.xml"))
            Dim radice As XmlElement = xmlDoc.DocumentElement()
            Dim nodi As XmlNodeList = Nothing
            Dim nodo As XmlNode = Nothing
            Dim lt As New List(Of String)
            nodo = radice.SelectSingleNode("/DocumentElement/Nodi")
            ElaboraNodi(nodo, lt)
            For Each s As String In lt
                Me.ListBox1.Items.Add(New ListItem(s))
            Next
        End Sub
    
    
        Protected Sub ElaboraNodi(ByVal nodo As XmlNode, ByVal lt As List(Of String))
            Dim nodi As XmlNodeList = nodo.SelectNodes("./Nodo")
            For i As Integer = 0 To nodi.Count - 1
                nodo = nodi(i)
                Dim value = nodo.Attributes("Nome").Value
                lt.Add("/" & value)
                ElaboraNodi(nodo, lt, lt.Count - 1)
            Next
        End Sub
    
        Protected Sub ElaboraNodi(ByVal nodo As XmlNode, ByVal lt As List(Of String), ByVal indice As Integer)
            Dim nodi As XmlNodeList = nodo.SelectNodes("./Nodo")
    
            For i As Integer = 0 To nodi.Count - 1
                nodo = nodi(i)
                Dim value = nodo.Attributes("Nome").Value
                lt.Add(lt(indice) & "/" & value)
                ElaboraNodi(nodo, lt, lt.Count - 1)
            Next
    
        End Sub
    Pietro

  4. #4
    Ti ringrazio moltissimo per la tua risposta. Una sola cosa.. Ma in questo modo non c'è rischio che lo stack delle chiamate vada in overflow dato che il metodo elabora nodi chiama se stesso per un numero n di volte?
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da voyager18
    Ti ringrazio moltissimo per la tua risposta. Una sola cosa.. Ma in questo modo non c'è rischio che lo stack delle chiamate vada in overflow dato che il metodo elabora nodi chiama se stesso per un numero n di volte?
    Le procedure ricorsive sono usate da tanto tempo. Tutto dipende da quanto è profonda la ricorsione
    Pietro

  6. #6
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541
    Originariamente inviato da pietro09
    Le procedure ricorsive sono usate da tanto tempo. Tutto dipende da quanto è profonda la ricorsione
    Scusate ma riapro :-)
    sto provando il codice ma mi da errore in List(Of String)
    'System.Web.UI.WebControls.ListBox' non ha parametri di tipo, quindi non può avere argomenti di tipo.

    Dove sbaglio?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.