Mensajes: 109
Temas: 14
Gracias Recibidas: 32 en 24 posts
Gracias Dadas: 116
Registro en: Nov 2020
22-08-2021, 12:01
(Última modificación: 23-08-2021, 19:48 por
Grandamakulo.)
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
Dim Elemento
As XmlElement
Dim Elementos
As XmlElement
[] Dim Subels
As XmlElement
[]
'Estos en realidad se leen de CDATA del XML
Dim Campos
As String[] = ["contenido",
"notas",
"sinopsis"] 'Estos deberían ser constantes de la aplicación
Valores.Resize(Campos.Count)
txtPaso
= trvProyecto.
Item.
Key lblActual.Caption = trvProyecto.Item.Text
Elemento = xmlObjeto.Root
Elementos = Elemento.GetChildrenByNamespace("id")
If Elemento.
Value = txtPaso
Then Subels = Elemento.Parent.GetChildrenByNamespace(Campos[i],, 2)
Subel = Subels[0]
Valores[i] = Subel.Value
'Y aquí ya se hacen «cositas» con los datos leídos.
txtPral.RichText = Valores[intContenido]
¿Habría alguna manera menos aparatosa?
Muchas gracias compañeros.[/i][/i]
Mensajes: 346
Temas: 8
Gracias Recibidas: 66 en 54 posts
Gracias Dadas: 62
Registro en: May 2020
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'
Mensajes: 109
Temas: 14
Gracias Recibidas: 32 en 24 posts
Gracias Dadas: 116
Registro en: Nov 2020
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?
Mensajes: 346
Temas: 8
Gracias Recibidas: 66 en 54 posts
Gracias Dadas: 62
Registro en: May 2020
Jesús, me llamo Jesús
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'
Mensajes: 109
Temas: 14
Gracias Recibidas: 32 en 24 posts
Gracias Dadas: 116
Registro en: Nov 2020
Gracias, Jesús, y disculpa el «renombrado»
Mensajes: 109
Temas: 14
Gracias Recibidas: 32 en 24 posts
Gracias Dadas: 116
Registro en: Nov 2020
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.