Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2008
fcios fcios is offline
Miembro
NULL
 
Registrado: jul 2003
Posts: 108
Poder: 16
fcios Va por buen camino
Question buscar el valor de un nodo en un TXMLDocument

tengo por ejemplo

<login>
__<header>
____<source>wsaa</source>
____<destination>SERIALNUMBER</destination>
__</header>
__<credentials>
____<token>PD94</token>
____<sign>ASepk</sign>
__</credentials>
</login>

por ejemplo el nodo source es único como puedo buscar el valor de ese nodo sin tener que entrar a hacer algo como

ixmlRoot := XMLDoc.DocumentElement;
ixmlHeader := ixmlRoot.ChildNodes.FindNode('header');
ixmlSource := ixmlHeader.ChildNodes.FindNode('source');
sSource := ixmlSource.Text;

probé esto pero no trae nada
raiz := FDocXml.DocumentElement.ChildNodes.FindNode('source');

¿ hay alguna forma de buscar un nodo y directamente me devuelva el valor ?

Ya te doy las Gracias
Responder Con Cita
  #2  
Antiguo 14-03-2008
Avatar de dec
dec dec is offline
Moderador
NULL
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.665
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hasta donde yo llego no podrás hacer lo que quieres, esto es, para buscar, tendrás que mirar en los nodos oportunos. Es decir, esta instrucción:

Código Delphi [-]
raiz := FDocXml.DocumentElement.ChildNodes.FindNode('source');

No funciona, porque estás buscando el nodo "source" entre los nodos hijos de la raíz del documento XML, pero, "source" está dentro del nodo "header".

En definitiva, no podrás hacer lo que quieres, ya digo, hasta donde yo llego, pero, nada te impide fabricarte una función o procedimiento que "busque" en el XML, aunque esto pase por recorrer todos sus nodos, al menos hasta encontrar aquello que se busca.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 17-03-2008
fcios fcios is offline
Miembro
NULL
 
Registrado: jul 2003
Posts: 108
Poder: 16
fcios Va por buen camino
Wink

Hola Dec y gracias, bueno acá está mi solución

Código Delphi [-]
function TForm1.BuscoValorDelNodo(XMLDoc:TXMLDocument;sNodoABuscar:string):{wide}String;
// Busca el 1er valor del nodo sNodoABuscar
var n,n2,nLongNodo:integer;
begin
  n:=Pos('<'+sNodoABuscar+'>',XMLDoc.XML.Text);
  if n = 0 then begin
    Result := '';
    Exit;
  end;
  nLongNodo:= Length(snodoABuscar) + 2;
  // busco desde donde empieza el nodo
  n2:=PosEx('+sNodoABuscar+'>',XMLDoc.XML.Text,n);
  Result := MidStr(XMLDoc.XML.Text,n+nLongNodo,n2-n-nLongNodo);
end;

Última edición por dec fecha: 17-03-2008 a las 16:13:49.
Responder Con Cita
  #4  
Antiguo 30-01-2018
farute farute is offline
Miembro
NULL
 
Registrado: feb 2010
Posts: 84
Poder: 9
farute Va por buen camino
hola estoy intentando sacar los valores de este xml
Cita:
<?xml version="1.0" encoding="utf-8" ?>
<current_observation>
<image>
</image>
<location>
<elevation>2579 ft</elevation>
</location>
<station_type>other</station_type>
<observation_time>Last Updated on January 30, 9:17 AM CET</observation_time>
<observation_time_rfc822>Tue, 30 Jan 2018 08:17:42 GMT</observation_time_rfc822>
<weather></weather>
<temperature_string>31.8 F (-0.1 C)</temperature_string>
<temp_f>31.8</temp_f>
<temp_c>-0.1</temp_c>
</current_observation>

pero sólo lo consigo con algunos con otros no.

por ejemplo con esto si quiero sacar la <elevation> que está en <location> la saco sin problemas:
Código Delphi [-]
var
    StartItemNode : IXMLNode;
begin
   XMLDoc.FileName := 'http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IVILLAQU3';
   XMLDoc.Active:=True;

   StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('location') ;
label3.Text:=  StartItemNode.childNodes['elevation'].Text;
end;

pero como quiera sacar otros valores de fuera de location como por ejemplo el "temp_c" no hay manera, no funcionan

Última edición por farute fecha: 30-01-2018 a las 10:43:26.
Responder Con Cita
  #5  
Antiguo 30-01-2018
farute farute is offline
Miembro
NULL
 
Registrado: feb 2010
Posts: 84
Poder: 9
farute Va por buen camino
vale ya lo he conseguido con
Código Delphi [-]
 StartItemNode := XMLDoc.DocumentElement.ChildNodes.FindNode('temp_c') ;
label3.Text:=  StartItemNode.Text;
Responder Con Cita
  #6  
Antiguo 07-02-2018
farute farute is offline
Miembro
NULL
 
Registrado: feb 2010
Posts: 84
Poder: 9
farute Va por buen camino
ahora el problema que me encuentro es que no funciona en una aplicación android,
no entiendo el por que,
no da error pero no hace nada.
si compilo en windows funciona y si compilo en android no coge datos.

alguno sabe que puede pasar.?

gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TXMLDocument madmai Internet 20 15-08-2012 01:08:39
TXMLDocument Documentos XML keys Internet 6 05-12-2006 18:47:45
TXMLDocument y la ñ grjordi Internet 1 12-04-2005 21:38:48
Buscar Nodo en TreeView jymy788 Varios 3 18-10-2004 16:32:50
Buscar un valor en toda una tabla rjsitruiz Varios 1 31-05-2004 23:55:29


La franja horaria es GMT +2. Ahora son las 14:09:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi