Principales respuestas
Como saber si un nodo existe

Pregunta
-
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 .NETPí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
-
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
Todas las respuestas
-
¿Un nodo de qué?
De un TreeView, documento XML, ....?????
Píldoras .NET
Artículos, tutoriales y ejemplos de código .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ... -
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. -
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 -
-
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 .NETPí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
-
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