Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  , pero no del todo. Clave directa para XML similar a Key de TreeView
#1
Question 

Hola a todos:
¿Existe alguna manera de acceder directamente a un elemento de un XML de manera similar a cómo se hace con «.Key» de un TreeView?
Ahora mismo estoy accediendo a los subelementos de un elemento así:

GAMBAS
  1. Public Sub trvProyecto_Select()
  2.  
  3.   Dim txtPaso As String
  4.   Dim Elemento As XmlElement
  5.   Dim Elementos As XmlElement[]
  6.   Dim Subel As XmlElement
  7.   Dim Subels As XmlElement[]
  8.   Dim Valores As New String[]
  9.   Dim i As Byte
  10.   
  11. 'Estos en realidad se leen de CDATA del XML
  12.   Dim Campos As String[] = ["contenido", "notas", "sinopsis"]
  13. 'Estos deberían ser constantes de la aplicación
  14.   Dim intContenido As Integer = 0
  15.   Dim intNotas As Integer = 1
  16.   Dim intSinopsis As Integer = 2
  17.  
  18.   Valores.Resize(Campos.Count)  
  19.   txtPaso = trvProyecto.Item.Key
  20.   lblActual.Caption = trvProyecto.Item.Text
  21.   Elemento = xmlObjeto.Root
  22.   Elementos = Elemento.GetChildrenByNamespace("id")
  23.   
  24.   For Each Elemento In Elementos
  25.     If Elemento.Value = txtPaso Then
  26.       For i = 0 To Campos.Max
  27.         Subels = Elemento.Parent.GetChildrenByNamespace(Campos[i],, 2)
  28.         If Subels.Count Then 
  29.           Subel = Subels[0]
  30.           Valores[i] = Subel.Value
  31.         Endif 
  32.       Next
  33.     Endif
  34.   Next
  35.   
  36. 'Y aquí ya se hacen «cositas» con los datos leídos.
  37.   txtPral.RichText = Valores[intContenido]
  38.  



¿Habría alguna manera menos aparatosa?
Muchas gracias compañeros.[/i][/i]
    ¡Gracias!
#2

Hola
No sé si podría servirte el método GetElementsByTagName, de la clase XmlDocument.

Primero deberías cargar tu archivo en un XMLDocument y luego obtener los elementos a partir de la "etiqueta" que quieras mediante el método GetElementsByTagName que devuelve un array de XmlElements.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 1 usuarios dice gracias a jguardon por este post:
  • Grandamakulo
    ¡Gracias!
#3

Gracias, Juan, pero eso es exactamente lo que hago ahora con el código que he puesto de ejemplo. Quizá está mal planteada la pregunta. ¿Existe alguna manera de no tener que iterar para encontrar un elemento concreto del xmlDocument, tal cual se hace con el «.Key» del TreeView?
    ¡Gracias!
#4

Jesús, me llamo Jesús Tongue Tongue

Entiendo la pregunta, pero al ser posible que existan elementos con la misma etiqueta dentro del árbol del documento, no creo que sea posible identificarlos a menos que los llames por el índice del array... no se me ocurre otra cosa. Si a priori no conoces el contenido del documento, no estoy seguro del procedimiento a seguir sin saber lo que pretendes o ver la estructura del XML.

En mi post sugiero el uso de GetElementByTagName, en lugar del que tu estás usando que es GetChildrenByNamespace. Si te he entendido bien, es posible que usando el Tag (etiqueta del nodo que buscas) sea más rápido. si hubiera solo un nodo con esa etiqueta llegarías en un solo paso, de otro modo no hay más remedio que iterar por los resultados que ambos métodos devuelven.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 1 usuarios dice gracias a jguardon por este post:
  • Grandamakulo
    ¡Gracias!
#5

Gracias, Jesús, y disculpa el «renombrado»  Big Grin
    ¡Gracias!
#6

Nada, lo único parecido sería XmlElement.GetChildrenByAttributeValue. Pero no sé si sería mejor pasar «id» como atributo o dejarlo como está aunque la búsqueda sea más larga.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)