none
Como saber si un nodo existe RRS feed

  • Pregunta

  • Hola tengo este codigo para saber si un nodo existe pero me da error

    If nodelist Is Nothing Then
     no existe
    Else
    Receta_Nueva.ComboBox1.Text = Total_Litros
    End If

    sábado, 10 de octubre de 2015 7:36

Respuestas

  • Hombre no es la forma más elegante pero podrías simplemente comprobar la longitud de la colección ChildNodes.

                            Dim Total_Ibu = node.ChildNodes(11).InnerText
    
                            If node.ChildNodes.Count > 11 Then
                                ' ...(El nodo no existe)...
                            Else
                                Dim Total_Litros = node.ChildNodes(12).InnerText
                                Receta_Nueva.ComboBox1.Text = Total_Litros
                            End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET lunes, 12 de octubre de 2015 5:56
    sábado, 10 de octubre de 2015 8:14
  • Fíjate en que has metido "if nodelist is Nothing" dentro de un bucle For Each que precisamente está recorriendo el nodelist. Por lo tanto, nodelist nunca puede ser nothing, porque no habría podido entrar la ejecución dentro del foreach.

    Si lo que quieres sabe es si node tiene 12 childnodes, puedes poner "If node.ChildNodes.Count>=12". Pero no creo que sea buena idea trabajar así, porque dependes de que el orden de los nodos en el XML sea precisamente siempre el mismo. Y fallará si en el futuro añades algún toreo tipo de información adicional dentro del fichero. Seria preferible buscar los nodos por su nombre en lugar de su tipo:

    Dim Total_Litros = node.SelectSingleNode("Total_Litros") 'O como se llame el nodo

    If Total_Litros Is Nothing Then
       
    ' ...(El nodo no existe)...
    Else
        Receta_Nueva
    .ComboBox1.Text = Total_Litros.InerText
    End If

    • Marcado como respuesta JETET lunes, 12 de octubre de 2015 5:56
    sábado, 10 de octubre de 2015 8:15

Todas las respuestas

  • ¿Un nodo de qué?

    De un TreeView, documento XML, ....?????


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 10 de octubre de 2015 7:44
  • If nodelist Is Nothing Then


    Aunque no das detalles de lo que estás haciendo, si has sido coherente en la nomenclatura de tus variables entonces "nodelist" no debería ser un nodo sino una lista de nodos. Y es normal que la lista no sea Nothing aunque esté vacía y no contenga ningún nodo. Tendrías que usar algo así como "if nodelist.Count=0" o "if nodelist.Length=0", dependiendo del tipo de variable de que se trate.
    sábado, 10 de octubre de 2015 7:50
  • Try
    
    
    
    
                Dim fecha As String
                Dim Nombre_cerveza As String
                fecha = DataGridView1.CurrentRow.Cells(2).Value 'DateTimeInput1.Text
                Nombre_cerveza = DataGridView1.CurrentRow.Cells(1).Value & "_"
                fecha = Replace(fecha, "/", "_")
                Dim existe As Boolean
                existe = System.IO.File.Exists("recetas/" & Nombre_cerveza & fecha & "/Lupulos.xml")
                If existe = False Then
                    Receta_Nueva.DGV_Lupulos.Rows.Clear()
                    Dim crear_archivo As String = MsgBox("Desea crear el Archivo Para los lupulos Ahora", MsgBoxStyle.YesNoCancel, "Crear Archivo")
                    If crear_archivo = vbYes Then
                        Dim path As String = "recetas/" & Nombre_cerveza & fecha & "/Lupulos.xml"
    
                        ' Create or overwrite the file. 
                        Dim fs As FileStream = File.Create(path)
                    End If
                Else
                    Dim Lupulo_vacio As String = System.IO.File.ReadAllText("recetas/" & Nombre_cerveza & fecha & "/Lupulos.xml")
    
                    If Lupulo_vacio.Length = 0 Then
                    Else
    
                        Receta_Nueva.DGV_Lupulos.Rows.Clear()
                        Dim Documentoxml As XmlDocument
                        Dim nodelist As XmlNodeList
                        Dim node As XmlNode
                        Documentoxml = New XmlDocument
                        Documentoxml.Load("recetas/" & Nombre_cerveza & fecha & "/Lupulos.xml")
                        nodelist = Documentoxml.SelectNodes("dataroot/Cervezas")
                        For Each node In nodelist
                            Dim Id = node.ChildNodes(0).InnerText
                            Dim Nombre = node.ChildNodes(1).InnerText
                            Dim Tipo_Lupulo = node.ChildNodes(2).InnerText
                            Dim Tipo_Adicion = node.ChildNodes(3).InnerText
                            Dim Peso = node.ChildNodes(4).InnerText
                            Dim Tiempo_hervido = node.ChildNodes(5).InnerText
                            Dim AA = node.ChildNodes(6).InnerText
                            Dim Ibu = node.ChildNodes(7).InnerText
                            Dim peso100 = node.ChildNodes(8).InnerText
                            Dim AA100 = node.ChildNodes(9).InnerText
                            Dim Total_Lupulo = node.ChildNodes(10).InnerText
                            Dim Total_Ibu = node.ChildNodes(11).InnerText
                            Dim Total_Litros = node.ChildNodes(12).InnerText
                            
                            If nodelist Is Nothing Then
                                ' ...(El nodo no existe)...
                            Else
                                Receta_Nueva.ComboBox1.Text = Total_Litros
                            End If
                            Receta_Nueva.Label1.Text = Total_Lupulo
                            Receta_Nueva.Label2.Text = Total_Ibu
    
                            Receta_Nueva.DGV_Lupulos.Rows.Add(Nombre, Tipo_Lupulo, Tipo_Adicion, Peso, Tiempo_hervido, AA, Ibu, peso100, AA100) ', Embotellado, Maduracion, Hervido, Inicio_fermentacion, Finalizacion_fermentacion, Secundario, Finalizacion_Secundario, Cla_Color, DryHopping, Finalizacion_DryHopping)
                            '' ''Receta_Nueva.Tinseth()
                            '' ''Receta_Nueva.Ibus_Deseados()
                        Next
                    End If
                End If
            Catch ex As Exception
                MsgBox(ex.ToString())
    
            End Try
    es un xml
    sábado, 10 de octubre de 2015 8:01
  • lo que pasa es que todos losarchivos xml no tiene este nodo 

    Dim Total_Litros = node.ChildNodes(12).InnerText

    sábado, 10 de octubre de 2015 8:02
  • Hombre no es la forma más elegante pero podrías simplemente comprobar la longitud de la colección ChildNodes.

                            Dim Total_Ibu = node.ChildNodes(11).InnerText
    
                            If node.ChildNodes.Count > 11 Then
                                ' ...(El nodo no existe)...
                            Else
                                Dim Total_Litros = node.ChildNodes(12).InnerText
                                Receta_Nueva.ComboBox1.Text = Total_Litros
                            End If
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET lunes, 12 de octubre de 2015 5:56
    sábado, 10 de octubre de 2015 8:14
  • Fíjate en que has metido "if nodelist is Nothing" dentro de un bucle For Each que precisamente está recorriendo el nodelist. Por lo tanto, nodelist nunca puede ser nothing, porque no habría podido entrar la ejecución dentro del foreach.

    Si lo que quieres sabe es si node tiene 12 childnodes, puedes poner "If node.ChildNodes.Count>=12". Pero no creo que sea buena idea trabajar así, porque dependes de que el orden de los nodos en el XML sea precisamente siempre el mismo. Y fallará si en el futuro añades algún toreo tipo de información adicional dentro del fichero. Seria preferible buscar los nodos por su nombre en lugar de su tipo:

    Dim Total_Litros = node.SelectSingleNode("Total_Litros") 'O como se llame el nodo

    If Total_Litros Is Nothing Then
       
    ' ...(El nodo no existe)...
    Else
        Receta_Nueva
    .ComboBox1.Text = Total_Litros.InerText
    End If

    • Marcado como respuesta JETET lunes, 12 de octubre de 2015 5:56
    sábado, 10 de octubre de 2015 8:15