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
 
Registrado: Jul 2003
Posts: 103
Poder: 15
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
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.611
Poder: 27
dec Va camino a la famadec Va camino a la fama
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
 
Registrado: Jul 2003
Posts: 103
Poder: 15
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 15:13:49.
Responder Con Cita
  #4  
Antiguo 30-01-2018
farute farute is offline
Miembro
 
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 09:43:26.
Responder Con Cita
  #5  
Antiguo 30-01-2018
farute farute is offline
Miembro
 
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
 
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 00:08:39
TXMLDocument Documentos XML keys Internet 6 05-12-2006 17:47:45
TXMLDocument y la ñ grjordi Internet 1 12-04-2005 20:38:48
Buscar Nodo en TreeView jymy788 Varios 3 18-10-2004 15:32:50
Buscar un valor en toda una tabla rjsitruiz Varios 1 31-05-2004 22:55:29


La franja horaria es GMT +2. Ahora son las 06:23:40.


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